Pandas groupby:获取每个单独组的产品价值

Pandas groupby: get product value for each individual group

这听起来可能有点愚蠢,所以提前致歉。我有这样的数据框:

            value       date
0           1.0         2010-01-31
1           0.3         2010-02-28
2           1.6         2011-03-31
3           2.5         2011-04-30
4          -1.0         2012-05-31
5          -0.3         2012-06-30
6           1.6         2013-07-31

我想按年份分组并将以下公式应用于每个组 [[(1 + v1) * (1 + v2) * (1 + v3) *....(1 +vn)] - 1] * 100 所以操作是将组中的每个单独元素加 1,然后取其乘积,然后从结果值中减去 1,然后乘以 100

但是当我这样做的时候

df.groupby(a.date.dt.year).apply(lambda x: (1+x['value'])).prod()

我得到一个单一的值(我认为它得到了所有东西的乘积。我如何得到每个组的乘积(每年一个单一的值)

您可以在 groupby apply 函数之外使用 assign

df.assign(val=df.value+1).groupby(df.date.dt.year).val.prod()-1
Out[800]: 
date
2010    1.6
2011    8.1
2012   -1.0
2013    1.6
Name: val, dtype: float64

两个好处:

1、更通俗易懂

2、更高效

df.groupby(a.date.dt.year).apply(lambda x: (1+x['value'])).prod()

此语句将计算各个列中所有值的乘积。因此,无论数据是否按年份分组,都只会返回一个值。 但是,如果您在 lambda 函数中应用 prod() 函数,如图所示 -

df.groupby(a.date.dt.year).apply(lambda x: (1+x['value']).prod())

这应该会给出您想要的输出。