Выбирая одни и те же данные из нескольких столбцов в пандах Dataframe

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

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 000 строк.

рассчитываю на вас всех.

1 ответ

Использование 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
Другие вопросы по тегам