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这很简单,只需屏蔽偶数行。见更新的答案。为什么我没想到那个脸掌。非常感谢你的帮助!