[python] pandasでgroupby後にfilterをかける
library python pandas
Published : 2022-03-30   Lastmod : 2022-07-17

pandasでgroupby後にfilterをかける

pandas利用中にgroupby後にある条件を適用したい場面に遭遇した。 調べてみると、groupby.filter(lambda x: x)でfilter関数を適用できる事がわかった。

github

  • githubのjupyter notebook形式のファイルはこちら

google colaboratory

  • google colaboratory で実行する場合はこちら

実行環境

!sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.6
BuildVersion:	18G95
!python -V
Python 3.5.5 :: Anaconda, Inc.

適当なDataFrameを作成

import pandas as pd

df = pd.DataFrame({
    'item': ['apple', 'apple', 'apple', 'orange', 'melon', 'apple', 'orange'],
    'sales': [1, 2, 1, 2, 3, 1, 1],
})
df
itemsales
0apple1
1apple2
2apple1
3orange2
4melon3
5apple1
6orange1

このDataFrameから、例えば、itemのカウントが2個以上の項目だけgroupbyしたいという機会があった。 これは以下の様に、groupbyの後にfilterとlambdaを利用する事で実現できる。

df.groupby('item').filter(lambda x: x['sales'].count() >= 2)
itemsales
0apple1
1apple2
2apple1
3orange2
5apple1
6orange1
df.groupby('item').filter(lambda x: x['sales'].max() >= 3)
itemsales
4melon3
df.groupby('item').filter(lambda x: x['sales'].min() <= 2)
itemsales
0apple1
1apple2
2apple1
3orange2
5apple1
6orange1

今までは余計なDataFrameを作成していたので、今後はワンライナーで実行するようにする。

Related Articles