выбирая одни и те же данные из нескольких столбцов в пандах Dataframe - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть следующие данные,

name    marks   team1   team2
John    30  kk  vv.
Sera    56  gg  ww.
Saara   66  dd  gg.
Dirg    33  rr  dd.
maget   34  ff  rr.
fared   56  vv  ff.
juile   32  ww  kk.

Мне нужна общая формула, чтобы получить записи по строкам, которые имеют 'kk' в команде 1 и команде 2. Это просто пример данных, у меня естьфактические данные, которые содержат более 100 тыс. строк.

в расчете на всех вас.

1 Ответ

0 голосов
/ 14 декабря 2018

Используйте boolean indexing с маской, созданной filter для получения всех столбцов с team, сравните с eq (==) и получите по крайней мере один True на строки any:

df = df[df.filter(like='team').eq('kk').any(axis=1)]
#if want select columns by names
#df = df[df[['team1','team2']].eq('kk').any(axis=1)]

Для повышения производительности используйте numpy.any:

df = df[np.any(df.filter(like='team').values == 'kk', axis=1)]

print (df)
    name  marks team1 team2
0   John     30    kk    vv
6  juile     32    ww    kk

Подробности:

print (df.filter(like='team').eq('kk'))
   team1  team2
0   True  False
1  False  False
2  False  False
3  False  False
4  False  False
5  False  False
6  False   True

print (df.filter(like='team').eq('kk').any(axis=1))
0     True
1    False
2    False
3    False
4    False
5    False
6     True
dtype: bool
...