簡體   English   中英

在pandas Dataframe的每一行中搜索一個字符串,並返回找到的列名稱

[英]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 

applymapdf.dot()

df['col_list']=df.applymap(lambda x: 'SRC' in x).dot(df.columns + '/').str[:-1]

applyseries.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM