![](/img/trans.png)
[英]Python2.7: Subset dataframe based on condition in first row of 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.