我试图找到一种方法来计算特定列的值的差异,以及基于具有值0和1的第三列的值的日期差异。
我的初始数据框如下所示:
df = pd.DataFrame({'value':[-15, -10, 40, -25, -50,-90, 200],
'date': ['2018-01-20', '2018-01-19','2018-01-19',
'2018-01-18', '2018-01-17','2018-01-16',
'2018-01-15'],
'flag':[0,0,1,0,0,0,1]})
每当值列大于零时,标志列的值为1,否则为0。假设它按日期排序。给定这个数据帧,我想计算值的变化和日期,对于标志等于0的每一行,相对于最接近的早期日期,标志等于1。
生成的df应如下所示:
这里,我们第一次得到正值是40. 40和-10之间的差值是30,这个值和-15之间的累积差值是15。
这没有什么不同(diff
),这是值得的sum
df=df.sort_values(['date','flag'],ascending=[True,False])#sort your df
df['diff_value']=df.groupby(df.flag.cumsum()).value.cumsum()#get the cumsum with flag key
df['diff_days']=df.groupby(df.flag.cumsum()).date.apply(lambda x : x.diff().dt.days.fillna(0).cumsum())#get the days different .
df=df.sort_index()
df
Out[436]:
date flag value diff_value diff_days
0 2018-01-20 0 -15 15 1.0
1 2018-01-19 0 -10 30 0.0
2 2018-01-19 1 40 40 0.0
3 2018-01-18 0 -25 35 3.0
4 2018-01-17 0 -50 60 2.0
5 2018-01-16 0 -90 110 1.0
6 2018-01-15 1 200 200 0.0