2014-09-04 2 views
0

У меня есть панд dataframe:Булевой запрос для имен столбцов pandas, содержащих строку?

import pandas as pd 

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
     'reports_1': [3, 42, 25, 25, 25], 
     'reports_2': [4, 24, 31, 2, 3]} 
df = pd.DataFrame(data) 
df 

Я хочу сделать булев запрос, чтобы спросить, если имя столбца содержит строку (то есть частичное совпадение):

Псевдокода пример:

For c in df.columns: 
    if df.columns[c] contains 'reports': 
     print('yay') 
    else: 
     print('boo') 

выход Псевдо-код, который я хочу:

Boo 
Yay 
Yay 
+0

ваш псевдокод настолько близок к правильному коду, вы его попробовали? – EdChum

+0

И что вы просите точно, код, который делает то, что вы хотите, или если есть какой-то метод pandas для достижения того, чего вы хотите. На данный момент ваш псевдокод является чистым питоном и является простой задачей делать – EdChum

+0

Это псевдокод, потому что «если df.columns [c] содержит« reports »:« недействительно. Нет запроса «содержит» – Anton

ответ

3

мы можем iterat е по столбцам и просто проверить, если строка в строке столбца:

In [14]: 

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
     'reports_1': [3, 42, 25, 25, 25], 
     'reports_2': [4, 24, 31, 2, 3]} 
df = pd.DataFrame(data) 
for col in df: 
    if 'reports' in col: 
     print('yay') 
    else: 
     print('boo') 
boo 
yay 
yay 

другой путь должен был бы создать серию из столбцов и использовать vectorised str метод contains:

In [33]: 

pd.Series(df.columns).str.contains('reports').apply(lambda x: 'yay' if x == True else 'boo') 
Out[33]: 
0 boo 
1 yay 
2 yay 
dtype: object 
2
df.columns.map(lambda x: "reports" in x and 'yay' or 'boo') 
+4

'lambda x: 'yay', если 'reports' в x else 'boo'' лучше, чем старомодный и/или взломанный. –

Смежные вопросы