python - 在 pandas Dataframe 的每一行中搜索一个字符串并返回找到的列名
问题描述
有没有办法在 DataFrame 中找到一个字符串并在匹配时返回列名。
在下面的示例中,我试图查找出现“SRC”的列,不确定我是否接近,但它返回所有列名,而不仅仅是相关的列名。我确定我在做一些愚蠢的事情。
df = pd.DataFrame({'col1':['foo SRC','bar','baz'], 'col2':['foo','bar','baz'],'col3':['SRC','bar','SRC'],
'col4':['SRC','SRC','SRC']})
df['col_list']= '/'.join(df.apply(lambda x : x.str.contains('SRC')).any().loc[lambda x : x].index)
Actual Result:
---------------------------------------------
col1 |col2 |col3 |col4 |col_list
--------|-------|-------|-------|----------------
foo SRC |foo |SRC |SRC |col1/col3/col4
bar |bar |bar |SRC |col1/col3/col4
baz |baz |SRC |SRC |col1/col3/col4
Expected:
col1 |col2 |col3 |col4 |col_list
--------|-------|-------|-------|----------------
foo SRC |foo |SRC |SRC |col1/col3/col4
bar |bar |bar |SRC |col4
baz |baz |SRC |SRC |col3/col4
解决方案
df['col_list']=df.applymap(lambda x: 'SRC' in x).dot(df.columns + '/').str[:-1]
或apply
使用series.str.contains()
and df.dot
:
df['col_list']=df.apply(lambda x:
x.str.contains('SRC',na=False)).dot(df.columns + '/').str[:-1]
print(df)
col1 col2 col3 col4 col_list
0 foo SRC foo SRC SRC col1/col3/col4
1 bar bar bar SRC col4
2 baz baz SRC SRC col3/col4
推荐阅读
- django - Django Azure 广告 AADSTS50011:请求中指定的回复 url 与为应用程序配置的回复 url 不匹配
- python - Tensorflow:tape.gradient() 为 GRU 层返回 None
- language-translation - 将 Watson Language 翻译成 Watson Assistant 的最简单方法是什么?
- angular - ng serve 导致错误:“不能将命名空间用作类型”
- dialogflow-es - 当我在 Google Actions 上使用 console.log() 时存储在哪里?
- python - tensorflow,tensorflow-gpu 无法识别 GPU
- php - 将关联数组的数组减少为关联数组
- postgresql - 从 PL/pgSQL 中的函数调用表函数 - 这可能吗?
- google-cloud-platform - 是否有一个好的 API 可以列出用户可以做某事的 GCP 项目?
- javascript - 使用带有 onSnapshot 的索引的 Firestore 查询字段不等于值