我有两列,一列是时间,另一列是音量。我需要从24小时前减去每个点的音量。
在熊猫中这样做的最佳方法是什么?
如果数据中存在漏洞并且数据帧中没有任何一点从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
答案 0 :(得分:1)
您实际上可以创建另一个数据框,在那里提前一天转移时间。
假设数据是
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}}