从具有共同 ID 的另一个 pandas 系列的所有元素中减去 pandas 系列

问题描述 投票:0回答:1

我有一个 pandas

series.groupby
对象,称之为
data
。如果我打印出元素,它看起来像这样:

<pandas.core.groupby.generic.SeriesGroupBy object at ***>
(1, 0     397.44
    1     12.72
    2     422.40
Name: value, dtype: float64)
(2, 3     398.88
    4     6.48
    5     413.52
Name: value, dtype: float64)
(3, 6     398.40
    7     68.40
    8     18.96
    9     56.64
    10    406.56
Name: value, dtype: float64)
(4, 11    398.64
    12    14.64
    13    413.76
Name: value, dtype: float64)
...

我想创建一个等效的对象,其中条目是系列中每个子列表的累积和,减去该列表的第一个条目。因此,例如,第一个元素将变为:

(1, 0     0         #(= 397.44 - 397.44)
    1     12.72     #(= 397.44 + 12.72 - 397.44)
    2     435.12    #(= 397.44 + 12.72 + 422.40 - 397.44)

我可以使用

apply
轻松获得累计总和:

cumulative_sums = data.apply(lambda x: x.cumsum())

但是当我尝试以我认为直观的方式减去列表的第一个元素时(

lambda x: x.cumsum()-x[0]
),我得到了
KeyError
。我怎样才能实现我想要做的事情?

python pandas dataframe group-by
1个回答
0
投票

尝试:

cumulative_sums = data.apply(lambda x: x.cumsum() - x.iat[0])
print(cumulative_sums)

打印:

a  b 
1  0       0.00
   1      12.72
   2     435.12
2  3       0.00
   4       6.48
   5     420.00
3  6       0.00
   7      68.40
   8      87.36
   9     144.00
   10    550.56
Name: value, dtype: float64
© www.soinside.com 2019 - 2024. All rights reserved.