为了账号安全,请及时绑定邮箱和手机立即绑定

对 Python 中数据帧的所有先前值求和

对 Python 中数据帧的所有先前值求和

一只名叫tom的猫 2021-08-11 21:27:40
我有如下数据:Year         Month          Region           Value1978           1             South             11990           1             North             221990           2             South             331990           2             Mid W             121998           1             South             11998           1             North             121998           2             South             21998           3             South             41998           1             Mid W             2..up to20102010我的结束日期是 2010 年,但我想通过将所有前一年的值加在一起来按地区和月份来总结所有值。我不想要一个常规的累计金额,而是一个按地区划分的每月累计金额,其中南地区的第 1 个月是之前所有前一个月的南地区的第 1 个月的累计月数,等等......所需的输出类似于:Month          Region        Cum_Value 1             South            2 2             South            34 3             South            4 . . 1             North            34 2             North            10 . . 1             MidW              2 2             MidW              12
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

使用pd.DataFrame.groupby与pd.DataFrame.cumsum


df1['cumsum'] = df1.groupby(['Month', 'Region'])['Value'].cumsum()

结果:


   Year  Month Region  Value  cumsum

0  1978      1  South    1.0     1.0

1  1990      1  North   22.0    22.0

2  1990      2  South   33.0    33.0

3  1990      2  Mid W   12.0    12.0

4  1998      1  South    1.0     2.0

5  1998      1  North   12.0    34.0

6  1998      2  South    2.0    35.0

7  1998      3  South    4.0     4.0

8  1998      1  Mid W    2.0     2.0


查看完整回答
反对 回复 2021-08-11
?
九州编程

TA贡献1785条经验 获得超4个赞

这是另一个更符合您预期输出的解决方案。


df = pd.DataFrame({'Year': [1978,1990,1990,1990,1998,1998,1998,1998,1998],

              'Month': [1,1,2,2,1,1,2,3,1],

              'Region': ['South','North','South','Mid West','South','North','South','South','Mid West'],

              'Value' : [1,22,33,12,1,12,2,4,2]})


#DataFrame Result

    Year  Month Region  Value

0   1978    1   South    1

1   1990    1   North    22

2   1990    2   South    33

3   1990    2   Mid West 12

4   1998    1   South    1

5   1998    1   North    12

6   1998    2   South    2

7   1998    3   South    4

8   1998    1   Mid West 2

要运行的代码:


df1 = df.groupby(['Month','Region']).sum()

df1 = df1.drop('Year',axis=1)

df1 = df1.sort_values(['Month','Region'])


#Final Result


Month   Region  Value

1      Mid West  2

1      North     34

1      South     2

2      Mid West  12

2      South     35

3      South     4


查看完整回答
反对 回复 2021-08-11
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信