【问题标题】:Python-dask/pandas How to delete/exclude the last observation in each groupPython-dask/pandas 如何删除/排除每组中的最后一个观察值
【发布时间】:2019-09-20 03:09:12
【问题描述】:

我正在使用 Python dask 处理大型 csv 面板数据集 (10GB+)。 数据框看起来像

 stock     date     time   spread  time_diff 
  VOD      01-01    9:05    0.01     0:07     
  VOD      01-01    9:12    0.03     0:52     
  VOD      01-01   10:04    0.02     0:11
  VOD      01-01   10:15    0.01     0:10     
  VOD      01-01   10:25    0.03     0:36      
  VOD      01-01   11:01    0.02     0:03
  VOD      01-01   10:04    0.02     0:09  
  VOD      01-01   10:15    0.01     0:10   
  VOD      01-01   10:25    0.03     0:39  
  VOD      01-01   11:04    0.02    22:00 
  VOD      01-02    9:04    0.02     0:05
  ...       ...     ...     ....     ...
  BAT      01-01    13:05   0.04    10:02
  BAT      01-02    9:07    0.05     0:03
  BAT      01-02    9:10    0.06     0:04

time_diff 列是两个观察值之间的时间差,使用代码: df['time_diff']=df['time'].shift(-1)-df['time']

我想计算每天每只股票的时间加权价差,但我在删除/排除每个股票日的最后一个观察值时遇到了问题。即我想删除/排除这些观察结果

 stock     date     time   spread  time_diff 
  VOD      01-01    11:04   0.02    22:00 
  BAT      01-01    13:05   0.04    10:02
  ...       ...     ...     ....     ...

因为他们的时差包括第二天的变量。

这里的问题是如何删除/排除 pandasdask 数据框中每个股票日的最后观察值。谢谢。

【问题讨论】:

    标签: python pandas pandas-groupby dask


    【解决方案1】:

    首先按列分组以获取“每天每只股票”数据。然后,使用带有负索引的 tail 来排除最后一行。

    df = df.groupby(['stock','date']).apply(lambda x: x.tail(-1))
    

    【讨论】:

    • 这看起来像 this 答案,似乎不起作用。
    • 嗨@Aarsh Trivedi。谢谢你。我收到警告 UserWarning: meta 未指定,从部分数据推断。如果结果出乎意料,请提供meta。之前:.apply(func) 之后:.apply(func, meta={'x': 'f8', 'y': 'f8'}) 用于数据帧结果或:.apply(func, meta=('x' , 'f8')) 用于系列结果
    • 我认为这是因为数据集是 dask 数据帧而不是 pandas 数据帧。
    • 嗨@rpanai,答案确实对我有用,因为在最近的版本中,pandas 已经实现了负索引。
    • @FlyUFalcon,除了警告,你还能得到想要的输出吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多