Skip to content
Advertisement

return index of matching value over columns in dataframe

my input:

task1 = pd.DataFrame({'task1':  ['|ReviewNG-Cecum Landmark','|ReviewNG-Cecum Landmark','|Cecum Landmark','|Cecum Landmark','|Cecum Landmark','|Cecum Landmark','|ReviewNG-Cecum Landmark',
'|ReviewNG-Cecum Landmark','|Other','|Other','|Other']})
task2 = pd.DataFrame({'task2': ['|Cecum Landmark|Other','|Cecum Landmark|Other','|Cecum Landmark|Other','|Cecum Landmark|Other','|Other','|Other','|Other',
'|Other']})
df = pd.concat([task1, task2], join = 'outer', axis = 1)

I trying get over df all range where matching value is true.
My code:

pat = "|Cecum Landmark|||Cecum Landmark"
idx = df.apply(lambda x: x.str.contains(pat, regex=True),axis=1)
idx.index[idx['task1']== True].tolist()

What I get:*

[2, 3, 4, 5]

So its correct, but how to get all index over each column in df? In other word, I dont want input manually name of column to get index matching value, but get ouptut per column.
So what I expect:

[2,3,4,5] [0,1,2,3]

so for example two lists(or more) each for its own column. There might be a better way to find matches and get the index?

Advertisement

Answer

Try the following,

result = df.apply(
    lambda x: x.index[x.str.contains(pat, regex=True, na=False)].tolist(),
    axis=0,
    result_type="reduce",
).tolist()
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement