データフレームがあり、データフレームをさらにフィルタリングして、行の列に特定の値がないグループのみを含めるようにしたい
たとえば、データフレームでは、ハミルトンが彼のスティント1のラップ3で追い越しをしているので、以下のデータフレームからハミルトンのスティント1ラップタイムレコードをすべて削除したいと思います。
groupbyを実行してから、get groupを実行し、グループ内の各行を繰り返し処理して、「クリアラップ」でnull以外の値を検出することを考えました。列を作成し、groupbyのすべての行の新しい列に「yes」というラベルを付けてから、グループを除外します。
データフレームをサブセット化するより速い方法はありますか?
データフレーム:
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
。
注意:@VivekKalyanaranganの改善に感謝します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())
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加