首页 > 解决方案 > Python Pandas:在整个数据框中搜索子字符串,然后输出找到子字符串的列的名称

问题描述

key_words_to_search = ['hello', 'goodbye']  
df = pd.DataFrame({
'col1':['hello','hi','ciao'],
'col2':['hello panda','goodbye','bonjour'],
'col3':['ni hao','hola','hello']})

我一直在使用类似下面的东西,但不确定如何获取列的实际名称。谢谢!

mask = df.applymap(lambda x: word in str(word).lower())
temp = df[mask.any(axis=1)].copy() 

数据框的表格可视化

标签: pythonpandas

解决方案


这是一种做法:

d = []

for k in key_words_to_search:
    print(k)
    i = df.applymap(lambda x: k in x)
    i = i.astype(int).mask(i, i.columns.to_series(), axis=1).astype(str).agg(lambda x: ','.join(i for i in x if not i.isdigit()), 1)
    d.append(i)

df[['hello','goodbye']] = pd.concat(d, axis=1)

print(df)

          col1         col2    col3      hello goodbye
0        hello  hello panda  ni hao  col1,col2        
1  hello panda      goodbye    hola       col1    col2
2       ni hao      goodbye   hello       col3    col2

推荐阅读