Как найти строку данных во всем Pandas и получить имя столбца, в котором она находится? - PullRequest
0 голосов
/ 08 января 2019

Я хочу найти имя столбца в кадре данных ("категории"), который содержит данную строку.

categories

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

Скажем, я хочу найти во всем этом фрейме данных строку "MCDO". Ответ должен быть "Фастфуд" . Я попытался использовать str.contains, но, похоже, он не работает для фреймов данных.

Как мне этого добиться? Спасибо.

Ответы [ 4 ]

0 голосов
/ 08 января 2019

Для этого также можно использовать цикл 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 

можно использовать «понимание списка»:

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

Выход:

['Electricity', 'Fastfood']
0 голосов
/ 08 января 2019

Или используйте:

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

Выход:

Fastfood
0 голосов
/ 08 января 2019

Если вы можете искать всю строку, это облегчает,

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

применяется еще,

df.apply(lambda x: x.str.startswith('MCDO').any()).idxmax()
0 голосов
/ 08 января 2019

Вы можете проверить с помощью contains с помощью any

df.apply(lambda x : x.str.contains('MCDO')).any().loc[lambda x : x].index
Index(['Fastfood'], dtype='object')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...