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())
这应该会给出您想要的输出。
这听起来可能有点愚蠢,所以提前致歉。我有这样的数据框:
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())
这应该会给出您想要的输出。