python-3.x - 在所有 DataFrame 列中搜索值(第一列除外!)并添加具有匹配列名称的新列

标签 python-3.x pandas

我想对 DataFrame 的所有列(第一列除外!)进行搜索,并使用匹配列的名称添加一个新列(如“Column_Match”)。

我尝试过这样的事情:

df.apply(lambda row: row.astype(str).str.contains('my_keyword').any(), axis=1)

但它并不排除第一列,我不知道如何返回并添加列名称。

非常感谢任何帮助!

最佳答案

如果想要每行第一个匹配值的列名称,请添加新列以匹配不存在的值 DataFrame.assignDataFrame.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.dotSeries.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/

相关文章:

python - 根据用户输入制作二维列表

python - Pandas groupby 应用 vs 具有特定功能的转换

python - 根据 numpy 数组中的列值获取行号

python - 一起使用堆排序和快速排序

python - 如何在 pandas (python) 中将时间对象转换为日期时间格式?

excel - 如何从 Excel 中的整数列中过滤字符串以在 Python 中处理

python - 如何在这个 pandas 数据框中分组、排序和计算差异?

python - 让递归过程在循环场景中工作(开始 A -> B,然后无限期地 B -> A)

list - 将 Python 3 列表写入 .csv

python - 正则表达式帮助