我有两列,一列是时间,另一列是音量。我需要用 24 小时前的音量减去每个点的音量。
在 pandas 中执行此操作的最佳方法是什么?
如果数据中有漏洞,并且数据框中没有 24 小时前的点,我可以设置一个规则,以便它将索引距离 24 小时前最近的点吗?
示例 df:
In [1]: df
Out[1]:
Volume Time
10 24/12/2017 18:40
27 24/12/2017 18:41
-19 24/12/2017 18:42
7 24/12/2017 18:43
-23 24/12/2017 18:44
18 24/12/2017 18:45
4 24/12/2017 18:46
最佳答案
您实际上可以创建另一个数据框,将时间提前一天。
假设数据是
Volume Time
0 10 2017-12-24 18:40:00
1 27 2017-12-24 18:41:00
2 -19 2017-12-24 18:42:00
3 7 2017-12-24 18:43:00
4 -23 2017-12-24 18:44:00
5 18 2017-12-24 18:45:00
6 4 2017-12-24 18:46:00
7 127 2017-12-23 18:41:00
8 39 2017-12-23 18:42:00
9 8 2017-12-23 18:45:00
10 40 2017-12-23 18:46:00
df2 = df.copy()
df2["Time"] = df['Time'] - pd.DateOffset(1)
然后,您进行内部合并。
df2.merge(df, on="Time")
Volume_x Time Volume_y
0 27 2017-12-23 18:41:00 127
1 -19 2017-12-23 18:42:00 39
2 18 2017-12-23 18:45:00 8
3 4 2017-12-23 18:46:00 40
Volumne_x
实际上是Time
列之后一天的交易量。也就是说,如果 Time = 2017-12-23 18:41:00
,则 Volume_x
实际上是 Time = 2017-12-24 18:41 的音量: 00
。现在,您可以进行减法。
适合那些可能想对数据进行实验的人。
{'Time': {0: Timestamp('2017-12-24 18:40:00'),
1: Timestamp('2017-12-24 18:41:00'),
2: Timestamp('2017-12-24 18:42:00'),
3: Timestamp('2017-12-24 18:43:00'),
4: Timestamp('2017-12-24 18:44:00'),
5: Timestamp('2017-12-24 18:45:00'),
6: Timestamp('2017-12-24 18:46:00'),
7: Timestamp('2017-12-23 18:41:00'),
8: Timestamp('2017-12-23 18:42:00'),
9: Timestamp('2017-12-23 18:45:00'),
10: Timestamp('2017-12-23 18:46:00')},
'Volume': {0: 10,
1: 27,
2: -19,
3: 7,
4: -23,
5: 18,
6: 4,
7: 127,
8: 39,
9: 8,
10: 40}}
关于python - 按时间差索引 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48351637/