有没有一种方法可以在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
答案 0 :(得分:2)
class Foo
def self.a
puts 'a'
end
def self.b
puts 'b'
a
end
end
[23] pry(main)> Foo.a
a
=> nil
[24] pry(main)> Foo.b
b
a
=> nil
或将apply
和df['col_list']=df.applymap(lambda x: 'SRC' in x).dot(df.columns + '/').str[:-1]
与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)