【问题标题】:Shifting row by delta time in Pandas在 Pandas 中按增量时间移动行
【发布时间】:2019-05-16 10:09:49
【问题描述】:

我有一个这样的数据框:

                             Ask      Bid  AskVolume  BidVolume
Gmt time
2018-10-10 10:30:00.573  1.14908  1.14906       1.57       1.00
2018-10-10 10:30:01.044  1.14906  1.14904       1.00       6.67
2018-10-10 10:30:01.620  1.14905  1.14903       1.00       2.06
2018-10-10 10:30:01.934  1.14906  1.14902       1.95       4.69
2018-10-10 10:30:02.093  1.14904  1.14902       1.00       1.50
2018-10-10 10:30:02.422  1.14902  1.14901       1.20       1.25
2018-10-10 10:30:02.967  1.14902  1.14900       3.00       1.50
2018-10-10 10:30:03.485  1.14902  1.14899       1.50       6.75
2018-10-10 10:30:04.016  1.14902  1.14900       1.00       1.25
2018-10-10 10:30:04.584  1.14902  1.14899       1.10       3.94
2018-10-10 10:30:05.316  1.14902  1.14900       1.57       1.00
2018-10-10 10:30:06.457  1.14902  1.14899       1.10       3.00
2018-10-10 10:30:06.972  1.14901  1.14899       1.00       2.25
2018-10-10 10:30:07.606  1.14901  1.14898       2.70       3.00
2018-10-10 10:30:10.751  1.14901  1.14899       1.20       1.87

我想将Ask 列移动 1 秒增量。我试过这个,但返回 NaN。

df = pd.read_csv('2hour.csv')
delta = pd.Timedelta(1,unit='s')
df['Gmt time'] = pd.DatetimeIndex(df['Gmt time'])
df.set_index(keys='Gmt time',inplace=True)
df['Shifted_Ask'] = df['Ask'].shift(freq=delta)
print df.head()

预期:

Gmt time                 Ask      Bid           AskVolume  BidVolume   Shifted_Ask 
2018-10-10 10:30:00.573  1.14908  1.14906       1.57       1.00         1.14906          
2018-10-10 10:30:01.044  1.14906  1.14904       1.00       6.67         1.14902  
2018-10-10 10:30:01.620  1.14905  1.14903       1.00       2.06         1.14902 
2018-10-10 10:30:01.934  1.14906  1.14902       1.95       4.69         1.14902
2018-10-10 10:30:02.093  1.14904  1.14902       1.00       1.50         1.14902

【问题讨论】:

  • 您能否在您的帖子中发布带有代码标签的预期示例输出,然后让我们知道。
  • @RavinderSingh13 我添加了预期的结果。我只想按时间移动Ask 列。 Shifted_Ask 在下一秒包含 Ask 列。
  • 能否请您也在这里告诉我新预期列背后的逻辑?
  • @BehdadAhmadi - 因为 ASK 列不是日期时间
  • @Backtrack 但是数据框是按时间索引和排序的。如何按增量时间移动它?

标签: python pandas datetime time-series


【解决方案1】:

感谢@RishitSanmukhani 2 年前提供的这个非常有用的答案:

df['Shifted_Ask'] = df.Ask.reindex(dd.index + pd.Timedelta(seconds=1), method='ffill').values

重新索引参考: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2021-04-07
    • 1970-01-01
    • 2019-01-24
    • 2016-05-02
    • 1970-01-01
    • 2020-08-27
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多