Выбирая одни и те же данные из нескольких столбцов в пандах 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