Python 计算成对行之间的差异

Python 计算成对行之间的差异,python,pandas,Python,Pandas,我有一个订单数据框,如下所示,“值”列表示现金流入/流出,“日期”列反映交易发生的时间 每个交易都是分组的,因此“数量”输出后总是有“数量”输入,通过“数量”列中的符号反映: Date Qty Price Value 0 2014-11-18 58 495.775716 -2875499 1 2014-11-24 -58 484.280147 2808824 2 2014-11-26 63 474.1386

我有一个订单数据框,如下所示,“值”列表示现金流入/流出,“日期”列反映交易发生的时间

每个交易都是分组的,因此“数量”输出后总是有“数量”输入,通过“数量”列中的符号反映:

    Date       Qty  Price       Value       
0   2014-11-18  58  495.775716  -2875499    
1   2014-11-24 -58  484.280147  2808824    
2   2014-11-26  63  474.138699  -2987073  
3   2014-12-31 -63  507.931247  3199966    
4   2015-01-05  59  495.923771  -2925950    
5   2015-02-05 -59  456.224370  2691723   
如何创建两列“n_days”和“price_diff”,即每笔交易的两个日期与“Value”之间的天数差

我试过:

df['price_diff'] = df['Value'].rolling(2).apply(lambda x: x[0] + x[1])
但接收到第一次观测的关键错误(0)


非常感谢

为什么不直接使用
sum

df['price_diff'] = df['Value'].rolling(2).sum()
虽然从名字上看,它看起来像

df['price_diff'] = df['Price'].diff()
对于这两列:

df[['Date_diff','Price_diff']] = df[['Date','Price']].diff()
输出:

        Date  Qty       Price    Value Date_diff  Price_diff
0 2014-11-18   58  495.775716 -2875499       NaT         NaN
1 2014-11-24  -58  484.280147  2808824    6 days  -11.495569
2 2014-11-26   63  474.138699 -2987073    2 days  -10.141448
3 2014-12-31  -63  507.931247  3199966   35 days   33.792548
4 2015-01-05   59  495.923771 -2925950    5 days  -12.007476
5 2015-02-05  -59  456.224370  2691723   31 days  -39.699401
        Date  Qty       Price    Value   Val_sum
0 2014-11-18   58  495.775716 -2875499       NaN
1 2014-11-24  -58  484.280147  2808824  -66675.0
2 2014-11-26   63  474.138699 -2987073       NaN
3 2014-12-31  -63  507.931247  3199966  212893.0
4 2015-01-05   59  495.923771 -2925950       NaN
5 2015-02-05  -59  456.224370  2691723 -234227.0

更新了每个评论,您可以尝试:

df['Val_sum'] = df['Value'].rolling(2).sum()[1::2]
输出:

        Date  Qty       Price    Value Date_diff  Price_diff
0 2014-11-18   58  495.775716 -2875499       NaT         NaN
1 2014-11-24  -58  484.280147  2808824    6 days  -11.495569
2 2014-11-26   63  474.138699 -2987073    2 days  -10.141448
3 2014-12-31  -63  507.931247  3199966   35 days   33.792548
4 2015-01-05   59  495.923771 -2925950    5 days  -12.007476
5 2015-02-05  -59  456.224370  2691723   31 days  -39.699401
        Date  Qty       Price    Value   Val_sum
0 2014-11-18   58  495.775716 -2875499       NaN
1 2014-11-24  -58  484.280147  2808824  -66675.0
2 2014-11-26   63  474.138699 -2987073       NaN
3 2014-12-31  -63  507.931247  3199966  212893.0
4 2015-01-05   59  495.923771 -2925950       NaN
5 2015-02-05  -59  456.224370  2691723 -234227.0

非常感谢,我实际上需要的是值的总和,而不是价格,因为值是“数量”*“价格”,所以在第1行,它应该是-2875499+2808824=-66675的总和?这是第一段代码所做的。同意,但是我只需要事务中每对值的差值,即每对值一个值?例如,我只需要数量符号为负时的价格差异,因为这反映了订单的结束?@cmp这很简单,只需屏蔽偶数行。见更新的答案。为什么我没想到那个脸掌。非常感谢你的帮助!