如何在整个 Pandas 数据框中搜索字符串并获取包含它的列的名称?

How to search entire Pandas dataframe for a string and get the name of the column that contains it?

我想在包含给定字符串的数据框 ("categories") 中查找列的名称

categories

    Groceries   Electricity Fastfood    Parking 
0   SHOP        ELCOMPANY   MCDONALDS   park
1   MARKET      ELECT       Subway      car
2   market      electr      Restauran   247 

假设我想在整个数据框中搜索字符串 "MCDO"。 答案应该是"Fastfood"。我尝试使用 str.contains 但它似乎不适用于数据帧。

我怎样才能做到这一点?谢谢。

您可以通过 containsany

检查
df.apply(lambda x : x.str.contains('MCDO')).any().loc[lambda x : x].index
Index(['Fastfood'], dtype='object')

或使用:

print(df.apply(lambda x: x.str.contains('MCDO')).replace(False,np.nan).dropna(axis=1,how='all').columns.item())

输出:

Fastfood

如果你能搜索整个字符串,那就更容易了,

(df == 'MCDONALDS').any().idxmax()

否则使用应用,

df.apply(lambda x: x.str.startswith('MCDO').any()).idxmax()

也可以为此使用 for 循环:

def strfinder(df, mystr):
    for col in df:
        for item in df[col]:
            if mystr in item:
                return col

print(strfinder(df, 'MCDO'))

获取可能包含该字符串的所有列,例如在下面修改后的数据框中:

    Groceries   Electricity  Fastfood    Parking 
0   SHOP        ELCOMPANY   MCDONALDS   park
1   MARKET      MCDON       Subway      car
2   market      electr      Restauran   247 

可以使用"list comprehension":

mystr = 'MCDO'
outlist = [ col 
            for col in df 
            for item in df[col]
            if mystr in item    ]
print(outlist)

输出:

['Electricity', 'Fastfood']