繁体   English   中英

Python2.7:根据 groupby 中的条件从数据框中过滤出组

[英]Python2.7: FIlter out group from dataframe based on condition in groupby

我有一个数据框,我想进一步过滤该数据框以仅包含其行在列中没有特定值的组

例如,在数据框中,由于汉密尔顿在他的第 1 阶段的第 3 圈超车,我想从下面的数据框中删除汉密尔顿的所有第 1 圈记录。

我想到做一个groupby然后一个get group,遍历组中的每一行,在“clear lap”中检测非空值? 列,并在新列中为 groupby 中的所有行标记“是”,然后过滤掉该组。

有没有更快的方法来设置数据帧的子集?

数据框:

    name                   driverRef stint  tyre      lap   pos     clear lap?
0   Australian Grand Prix   vettel  1.0     Super soft  2   1        NaN
1   Australian Grand Prix   vettel  1.0     Super soft  3   1        NaN
2   Australian Grand Prix   vettel  1.0     Super soft  4   1        NaN
3   Australian Grand Prix   ham     1.0     Super soft  2   3        NaN
4   Australian Grand Prix   ham     1.0     Super soft  3   2        overtook
5   Australian Grand Prix   ham     1.0     Super soft  4   2        NaN

我相信您需要通过过滤获取所有组,然后通过isin再次过滤:

注意:谢谢@Vivek Kalyanarangan 通过unique改进。

a = df.loc[df['clear lap?'].notnull(), 'driverRef'].unique()
print (a)
['ham']

df = df[~df['driverRef'].isin(a)]
print (df)
                    name driverRef  stint        tyre  lap  pos clear lap?
0  Australian Grand Prix    vettel    1.0  Super soft    2    1        NaN
1  Australian Grand Prix    vettel    1.0  Super soft    3    1        NaN
2  Australian Grand Prix    vettel    1.0  Super soft    4    1        NaN

另一个解决方案,速度较慢:

df = df[df['clear lap?'].isnull().groupby(df['driverRef']).transform('all')]

或者最慢:

df = df.groupby('driverRef').filter(lambda x: x['clear lap?'].isnull().all())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM