在pandas Dataframe的每一行中搜索一个字符串,并返回找到的列名称

时间:2019-07-19 15:38:35

标签: python pandas

有没有一种方法可以在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 

1 个答案:

答案 0 :(得分:2)

applymapdf.dot()一起使用:

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

或将applydf['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)