Python中列值的累积和循环在每年特定月份重置值
我试图在一列中求和值,并在每年的某个月重置。我已经检查了以下链接,这些链接很有用,但我似乎仍然找不到正确方向的答案 最接近我要查找的()的链接,但我不知道如何将其从PySpark转换为Pandas(或其他Python方法)Python中列值的累积和循环在每年特定月份重置值,python,pandas,Python,Pandas,我试图在一列中求和值,并在每年的某个月重置。我已经检查了以下链接,这些链接很有用,但我似乎仍然找不到正确方向的答案 最接近我要查找的()的链接,但我不知道如何将其从PySpark转换为Pandas(或其他Python方法) raw_data = {'change_value': [-6, -13, -19, -82, -25, -39, -27, 0, 8, 32, 55, 94, 75, 77], 'cumu_value': [-6, -19, -38, -120, -1
raw_data = {'change_value': [-6, -13, -19, -82, -25, -39, -27, 0, 8, 32, 55, 94, 75, 77],
'cumu_value': [-6, -19, -38, -120, -145, -184, -211, -211, -203, -171, -116, -22, 75, 130],
'month': [10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
'date': ['2017-10','2017-11','2017-12','2018-01','2018-02','2018-03'
,'2018-04','2018-05','2018-06','2018-07','2018-08','2018-09',
'2018-10', '2018-11']}
df = pd.DataFrame(raw_data, columns = ['change_value', 'cumu_value', 'month', 'date'])
df
df.loc[df['month'] == '10', ['cumu_value']] = df['change_value']
df['cumu_value'] = df.change_value.cumsum()
change_value cumu_value month date
0 -6 -6 10 2017-10
1 -13 -19 11 2017-11
2 -19 -38 12 2017-12
3 -82 -120 1 2018-01
4 -25 -145 2 2018-02
5 -39 -184 3 2018-03
6 -27 -211 4 2018-04
7 0 -211 5 2018-05
8 8 -203 6 2018-06
9 32 -171 7 2018-07
10 55 -116 8 2018-08
11 94 -22 9 2018-09
12 75 75 10 2018-10 <<<< every October I would like the to cumu_value to reset - to that month's change_value
13 77 130 11 2018-11 <<< for some reason the cumu_value adds all the values for all the months rather than just the value for 2018-10 and 2018-11
raw_data={'change_value':[-6,-13,-19,-82,-25,-39,-27,0,8,32,55,94,75,77],
‘累计值’:[-6、-19、-38、-120、-145、-184、-211、-211、-203、-171、-116、-22、75、130],
“月”:[10,11,12,1,2,3,4,5,6,7,8,9,10,11],
‘日期’:[‘2017-10’、‘2017-11’、‘2017-12’、‘2018-01’、‘2018-02’、‘2018-03’
,'2018-04','2018-05','2018-06','2018-07','2018-08','2018-09',
'2018-10', '2018-11']}
df=pd.DataFrame(原始数据,列=['change\u value','cumu\u value','month','date'])
df
df.loc[df['month']=='10',['cumu_value']]=df['change_value']
df['cumu_value']=df.change_value.cumsum()
更改金额累计金额月份日期
0 -6 -6 10 2017-10
1 -13 -19 11 2017-11
2 -19 -38 12 2017-12
3 -82 -120 1 2018-01
4 -25 -145 2 2018-02
5 -39 -184 3 2018-03
6 -27 -211 4 2018-04
7 0 -211 5 2018-05
8 8 -203 6 2018-06
9 32 -171 7 2018-07
10 55 -116 8 2018-08
11 94 -22 9 2018-09
12 75 75 10 2018-10创建组
,组id每年10月变化。然后在每个组内创建cumsum
,有效地在每年10月重置
df['cumu_value'] = df.groupby(df.month.eq(10).cumsum()).change_value.cumsum()
输出:
作为说明,我们将行分组如下:
print(df.month.eq(10).cumsum())
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 2
13 2
Name: month, dtype: int32
因此,我们将cumsum
前12行与后2行分开。创建组
,其中组id每年10月都会更改。然后在每个组内cumsum
,有效地在每年10月重置它
df['cumu_value'] = df.groupby(df.month.eq(10).cumsum()).change_value.cumsum()
输出:
作为说明,我们将行分组如下:
print(df.month.eq(10).cumsum())
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 2
13 2
Name: month, dtype: int32
因此,我们将前12行与后2行分开