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

2024-04-29 03:51:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下数据:

Year         Month          Region           Value
1978           1             South             1
1990           1             North             22
1990           2             South             33
1990           2             Mid W             12
1998           1             South             1
1998           1             North             12
1998           2             South             2
1998           3             South             4
1998           1             Mid W             2
.
.

up to
2010
2010

我的结束日期是2010年,但我想将所有值按地区和月份相加,将所有上一年的值相加。你知道吗

我不想要一个定期的累计总和,而是一个按地区的月度累计总和,其中南部地区的第1个月是前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

Tags: to数据valueyearregion地区up月度
2条回答

pd.DataFrame.groupbypd.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

下面是另一个更符合您预期输出的解决方案。你知道吗

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

相关问题 更多 >