簡體   English   中英

如何聚合來自 Pandas 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM