TLDR; Pandalar groupby.agg
, (1) birden çok sütunda toplamaları ve (2) bir sütunda birden çok kümeyi belirtmek için yeni ve daha kolay bir sözdizimine sahiptir. Bunu pandalar> = 0.25 için yapmak için şunu kullanın:
df.groupby('dummy').agg(Mean=('returns', 'mean'), Sum=('returns', 'sum'))
Mean Sum
dummy
1 0.036901 0.369012
VEYA
df.groupby('dummy')['returns'].agg(Mean='mean', Sum='sum')
Mean Sum
dummy
1 0.036901 0.369012
Pandalar, GroupBy.agg
adlandırılmış toplamaları belirlemek için daha sezgisel bir sözdizimi lehine davranışı değiştirdi . Geliştirmeler hakkındaki 0.25 dokümanlar bölümüne ve ilgili GitHub sorunları GH18366 ve GH26512'ye bakın .
Belgelerden,
Çıktı sütun adları üzerinde denetimle sütuna özgü toplamayı desteklemek için, pandalar GroupBy.agg()
"adlandırılmış toplama" olarak bilinen özel sözdizimini kabul eder.
- Anahtar kelimeler çıktı sütun isimleridir
- Değerler, ilk öğesi seçilecek sütun ve ikinci öğe bu sütuna uygulanacak kümedir. Pandas, argümanların ne olduğunu daha net hale getirmek için pandas.NamedAgg adlı tuple'a ['sütun', 'aggfunc'] alanlarını sağlar. Her zaman olduğu gibi, toplama çağrılabilir veya dize takma adı olabilir.
Artık anahtar kelime argümanları aracılığıyla bir demeti iletebilirsiniz. Demetler, biçimini takip eder (<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
Alternatif olarak, pd.NamedAgg
işleri daha açık hale getiren (esasen adlandırılmış bir çift) kullanabilirsiniz .
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
Seri için daha da basittir, sadece agfunc'u bir anahtar kelime argümanına aktarın.
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
Son olarak, sütun adlarınız geçerli python tanımlayıcıları değilse, paketi açarken bir sözlük kullanın:
df.groupby('kind')['height'].agg(**{'max height': 'max', ...})
Pandalar <0.25
0.24'e kadar çıkan pandaların daha yeni sürümlerinde, toplama çıktısı için sütun adlarını belirtmek için bir sözlük kullanıyorsanız, bir 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
Sütunları yeniden adlandırmak için sözlük kullanmak v0.20'de kullanımdan kaldırılmıştır. Pandaların daha yeni sürümlerinde, bu daha basit bir şekilde bir tuple listesi iletilerek belirlenebilir. İşlevler bu şekilde belirtiliyorsa, bu sütun için tüm işlevlerin (ad, işlev) çiftlerinin demetleri olarak belirtilmesi gerekir.
df.groupby("dummy").agg({'returns': [('op1', 'sum'), ('op2', 'mean')]})
returns
op1 op2
dummy
1 0.328953 0.032895
Veya,
df.groupby("dummy")['returns'].agg([('op1', 'sum'), ('op2', 'mean')])
op1 op2
dummy
1 0.328953 0.032895