按时差索引pandas数据帧

时间:2018-01-20 01:09:13

标签: python pandas dataframe indexing

我有两列,一列是时间,另一列是音量。我需要从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

1 个答案:

答案 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:00Volume_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}}