![](/img/trans.png)
[英]Get values from pandas.core.groupby.generic.DataFrameGroupBy object
[英]How to aggregate values from multiple columns from a Pandas DataFrameGroupBy object?
假設我有以下數據。 我知道我可以匯總每一列以獲得平均重量或最小長度之類的東西。 但是假設我想計算每個犬種的平均單位長度重量。 我該怎么做?
dogs_df = pd.DataFrame({
"breed": ["corgi", "poodle"] * 3,
"weight": [8, 7, 11, 9, 8, 7],
"length": [22, 15, 24, 13, 18, 19],
})
dogs_gb = dogs_df.groupby("breed")
聚合單個列很簡單dogs_gb.agg({'weight': lambda x: np.sum(x)})
(我知道有更簡潔的方法),我只是不確定如何獲取其他列值同時。
我期待這樣的數據......
avg_weight_per_avg_length
breed
corgi 0.42
poodle 0.48
嘗試這個:
dogs_df.groupby(["breed", "length"]).agg(np.mean)
代碼:
import pandas as pd
import numpy as np
dogs_df = pd.DataFrame({
"breed": ["corgi", "poodle"] * 3,
"weight": [8, 7, 11, 9, 8, 7],
"length": [22, 15, 24, 13, 18, 19],
})
print(dogs_df)
dogs_gb = dogs_df.groupby("breed")
print(dogs_gb.agg({'weight': lambda x: np.sum(x), 'length': lambda x: np.sum(x)}))
Output:
breed weight length
0 corgi 8 22
1 poodle 7 15
2 corgi 11 24
3 poodle 9 13
4 corgi 8 18
5 poodle 7 19
weight length
breed
corgi 27 64
poodle 23 47
嘗試這個:
dogs_gb_avg = dogs_df.groupby("breed").mean()
dogs_gb_avg.weight / dogs_gb_avg.length
breed
corgi 0.421875
poodle 0.489362
dtype: float64
或者從您的 groupby 繼續,我們可以使用pipe
:
dogs_gb = dogs_df.groupby("breed")
dogs_gb.pipe(lambda x: x.weight.mean().div(x.length.mean()))
breed
corgi 0.421875
poodle 0.489362
dtype: float64
我會選擇前者,主要是因為清晰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.