使用GROUPBY apply
と
- が列
- の名前を変更し集計を実行するためにGROUPBY
apply
メソッドを使用して、列に
の名前を変更するためにシリーズを返すことができます
名にスペースを可能にします選択した任意の方法で返された列を並べ替えることができます
列間の対話を許可します
これを行うには、単一のレベルの指標とNOTマルチインデックス
返します:
- あなたはこのカスタム関数は、データフレームとして各グループを渡され
apply
- に渡すカスタム関数を作成します
- シリーズを返す
- このシリーズのインデックスは新しいカラムになります
偽のデータを作成します
df = pd.DataFrame({"User": ["user1", "user2", "user2", "user3", "user2", "user1", "user3"],
"Amount": [10.0, 5.0, 8.0, 10.5, 7.5, 8.0, 9],
'Score': [9, 1, 8, 7, 7, 6, 9]})
シリーズ
my_agg
の内部変数x
は、データフレーム
def my_agg(x):
names = {
'Amount mean': x['Amount'].mean(),
'Amount std': x['Amount'].std(),
'Amount range': x['Amount'].max() - x['Amount'].min(),
'Score Max': x['Score'].max(),
'Score Sum': x['Score'].sum(),
'Amount Score Sum': (x['Amount'] * x['Score']).sum()}
return pd.Series(names, index=['Amount range', 'Amount std', 'Amount mean',
'Score Sum', 'Score Max', 'Amount Score Sum'])
あるを返すカスタム関数を作成します
はapply
メソッドGroupByにこのカスタム関数を渡し
df.groupby('User').apply(my_agg)
大きな欠点は、この機能はGROUPBYと辞書を使用してcythonized aggregations
ためagg
よりもはるかに遅くなるということですagg
メソッド
ディクショナリ辞書を使用するriesはその複雑さとやや曖昧な性質のため削除されました。この機能を将来どのように改善するかについては、ongoing discussionがあります。ここでは、groupbyコールの後に集約カラムに直接アクセスできます。適用したいすべての集約関数のリストを渡すだけです。
df.groupby('User')['Amount'].agg(['sum', 'count'])
出力
sum count
User
user1 18.0 2
user2 20.5 3
user3 10.5 1
Other
という名前の別の数値列があった場合は、ここのように、明示的に異なる列に異なる集計を示すために辞書を使用することも可能です。
df = pd.DataFrame({"User": ["user1", "user2", "user2", "user3", "user2", "user1"],
"Amount": [10.0, 5.0, 8.0, 10.5, 7.5, 8.0],
'Other': [1,2,3,4,5,6]})
df.groupby('User').agg({'Amount' : ['sum', 'count'], 'Other':['max', 'std']})
出力
Amount Other
sum count max std
User
user1 18.0 2 6 3.535534
user2 20.5 3 5 1.527525
user3 10.5 1 4 NaN
私はこれが減価償却されている理由を知ってみたい(私は正当な理由があると確信しています)。誰かがそれに関する議論へのリンクを持っていますか? –