簡體   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