在给定条件列的情况下查找pandas数据帧中行与值之间的差异

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

我试图找到一种方法来计算特定列的值的差异,以及基于具有值0和1的第三列的值的日期差异。

我的初始数据框如下所示:

enter image description here

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应如下所示:

enter image description here

这里,我们第一次得到正值是40. 40和-10之间的差值是30,这个值和-15之间的累积差值是15。

python-3.x pandas indexing difference datediff
1个回答
1
投票

这没有什么不同(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
© www.soinside.com 2019 - 2024. All rights reserved.