[英]Search a string in each row of a pandas Dataframe and return the column names where found
有沒有一種方法可以在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()
和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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.