Pandas 条件筛选dataframe

Pandas 条件筛选dataframe

问题描述

我正在尝试筛选一个数据框,但是我不知道如何筛选到我真正想要的值。我真的不知道如何解释我想做什么(这让搜索变得真正痛苦),因此下面是一个示例代码片段:

race    driver     team      ...
1       Alonso     Ferrari
1       Massa      Ferrari
1       Hamilton   McLaren
...
2       Alonso     McLaren
2       Hamilton   McLaren
2       Massa      Ferrari
...

我想要的是根据阿隆索所在的车队来筛选特定比赛的结果,以便找到他的队友 – 这样对于第一场比赛,我得到阿隆索和马萨,但对于第二场比赛,我得到阿隆索和汉密尔顿。所以过滤后的预期结果是:

race    driver     team      ...
1       Alonso     Ferrari
1       Massa      Ferrari
2       Alonso     McLaren
2       Hamilton   McLaren
...

我使用过滤器将行限制为只有 Alonso 的行:

df[df.driver == "Alonso"]

或者通过以下方式将行限制为所有 Ferrari 和 McLaren 的行(数据中除这两支队伍外还有其他队伍):

df.team.isin(teams)

其中teams列出了所有驾驶员是 Alonso 的行所列出的所有队伍,但我似乎无法将这两个过滤器结合起来,以便按照 Alonso 参赛的队伍进行条件过滤。

解决方案

代码

使用 groupby + filter

df.groupby(['race', 'team']).filter(lambda x: x['driver'].eq('Alonso').sum() > 0)

输出:

race    driver      team
0   1   Alonso      Ferrari
1   1   Massa       Ferrari
3   2   Alonso      McLaren
4   2   Hamilton    McLaren

示例代码

import pandas as pd
data1 = {'race': [1, 1, 1, 2, 2, 2], 
         'driver': ['Alonso', 'Massa', 'Hamilton', 'Alonso', 'Hamilton', 'Massa'], 
         'team': ['Ferrari', 'Ferrari', 'McLaren', 'McLaren', 'McLaren', 'Ferrari']}
df = pd.DataFrame(data1)

df

race    driver      team
0   1   Alonso      Ferrari
1   1   Massa       Ferrari
2   1   Hamilton    McLaren
3   2   Alonso      McLaren
4   2   Hamilton    McLaren
5   2   Massa       Ferrari

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程