我想对 DataFrame 的所有列(第一列除外!)进行搜索,并使用匹配列的名称添加一个新列(如“Column_Match”)。
我尝试过这样的事情:
df.apply(lambda row: row.astype(str).str.contains('my_keyword').any(), axis=1)
但它并不排除第一列,我不知道如何返回并添加列名称。
非常感谢任何帮助!
最佳答案
如果想要每行第一个匹配值的列名称,请添加新列以匹配不存在的值 DataFrame.assign
和 DataFrame.idxmax
对于列名称:
df = pd.DataFrame({
'B':[4,5,4,5,5,4],
'A':list('abcdef'),
'C':list('akabbe'),
'F':list('eakbbb')
})
f = lambda row: row.astype(str).str.contains('e')
df['new'] = df.iloc[:,1:].apply(f, axis=1).assign(missing=True).idxmax(axis=1)
print (df)
B A C F new
0 4 a a e F
1 5 b k a missing
2 4 c a k missing
3 5 d b b missing
4 5 e b b A
5 4 f e b C
如果需要所有匹配值的所有列名称,请创建 bool DataFrame 并使用点积与列名称 DataFrame.dot
和 Series.str.rstrip
:
f = lambda row: row.astype(str).str.contains('a')
df1 = df.iloc[:,1:].apply(f, axis=1)
df['new'] = df1.dot(df.columns[1:] + ', ').str.rstrip(', ').replace('', 'missing')
print (df)
B A C F new
0 4 a a e A, C
1 5 b k a F
2 4 c a k C
3 5 d b b missing
4 5 e b b missing
5 4 f e b missing
关于python-3.x - 在所有 DataFrame 列中搜索值(第一列除外!)并添加具有匹配列名称的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55099272/