繁体   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