TLDR; Pandas groupby.agg
memiliki sintaks baru yang lebih mudah untuk menentukan (1) agregasi di beberapa kolom, dan (2) beberapa agregasi di kolom. Jadi, untuk melakukan ini pada panda> = 0,25 , gunakan
df.groupby('dummy').agg(Mean=('returns', 'mean'), Sum=('returns', 'sum'))
Mean Sum
dummy
1 0.036901 0.369012
ATAU
df.groupby('dummy')['returns'].agg(Mean='mean', Sum='sum')
Mean Sum
dummy
1 0.036901 0.369012
Panda telah mengubah perilaku yang GroupBy.agg
mendukung sintaks yang lebih intuitif untuk menentukan agregasi bernama. Lihat bagian dokumen 0.25 tentang Penyempurnaan serta masalah GitHub yang relevan GH18366 dan GH26512 .
Dari dokumentasi,
Untuk mendukung agregasi khusus kolom dengan kontrol atas nama kolom keluaran, panda menerima sintaks khusus dalam GroupBy.agg()
, yang dikenal sebagai "agregasi bernama", di mana
- Kata kunci adalah nama kolom keluaran
- Nilainya adalah tupel yang elemen pertamanya adalah kolom untuk dipilih dan elemen kedua adalah agregasi untuk diterapkan ke kolom tersebut. Pandas menyediakan pandas.NamedAgg bernamatuple dengan kolom ['column', 'aggfunc'] untuk memperjelas argumennya. Seperti biasa, agregasi dapat berupa callable atau alias string.
Anda sekarang dapat mengirimkan tupel melalui argumen kata kunci. Tupel mengikuti format (<colName>, <aggFunc>)
.
import pandas as pd
pd.__version__
# '0.25.0.dev0+840.g989f912ee'
# Setup
df = pd.DataFrame({'kind': ['cat', 'dog', 'cat', 'dog'],
'height': [9.1, 6.0, 9.5, 34.0],
'weight': [7.9, 7.5, 9.9, 198.0]
})
df.groupby('kind').agg(
max_height=('height', 'max'), min_weight=('weight', 'min'),)
max_height min_weight
kind
cat 9.5 7.9
dog 34.0 7.5
Sebagai alternatif, Anda dapat menggunakan pd.NamedAgg
(pada dasarnya bernamauple) yang membuat segalanya lebih eksplisit.
df.groupby('kind').agg(
max_height=pd.NamedAgg(column='height', aggfunc='max'),
min_weight=pd.NamedAgg(column='weight', aggfunc='min')
)
max_height min_weight
kind
cat 9.5 7.9
dog 34.0 7.5
Bahkan lebih sederhana untuk Seri, cukup teruskan aggfunc ke argumen kata kunci.
df.groupby('kind')['height'].agg(max_height='max', min_height='min')
max_height min_height
kind
cat 9.5 9.1
dog 34.0 6.0
Terakhir, jika nama kolom Anda bukan pengenal python yang valid, gunakan kamus dengan membongkar:
df.groupby('kind')['height'].agg(**{'max height': 'max', ...})
Panda <0,25
Dalam versi panda yang lebih baru yang mengarah ke 0,24, jika menggunakan kamus untuk menentukan nama kolom untuk keluaran agregasi, Anda akan mendapatkan FutureWarning
:
df.groupby('dummy').agg({'returns': {'Mean': 'mean', 'Sum': 'sum'}})
# FutureWarning: using a dict with renaming is deprecated and will be removed
# in a future version
Menggunakan kamus untuk mengganti nama kolom sudah tidak digunakan lagi di v0.20. Pada versi panda yang lebih baru, ini dapat ditentukan secara lebih sederhana dengan meneruskan daftar tupel. Jika menentukan fungsi dengan cara ini, semua fungsi untuk kolom itu perlu ditetapkan sebagai tupel dari pasangan (nama, fungsi).
df.groupby("dummy").agg({'returns': [('op1', 'sum'), ('op2', 'mean')]})
returns
op1 op2
dummy
1 0.328953 0.032895
Atau,
df.groupby("dummy")['returns'].agg([('op1', 'sum'), ('op2', 'mean')])
op1 op2
dummy
1 0.328953 0.032895