Pandas groupby:获得每个组的产品价值

时间:2018-03-27 17:53:27

标签: python pandas vector multiplication pandas-groupby

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

            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()

我得到一个单一的价值(我认为它得到了所有产品。我如何获得每个产品的产品(每年一个价值)

2 个答案:

答案 0 :(得分:3)

您可以使用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,效率更高

答案 1 :(得分:1)

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())

这应该根据需要提供输出。