【问题标题】:Python Pandas Groupby Dropping DateTime ColumnsPython Pandas Groupby 删除日期时间列
【发布时间】:2014-09-06 01:40:36
【问题描述】:

在包含间歇性 NaT 值的 DataFrame 上使用 groupby.median() 和 groupby.mean() 时遇到了一些问题。具体来说,我在数据集中有几列计算基于其他列的各种时间差。在某些情况下,不存在时差,导致 NaT 值类似于以下示例:

Group    Category    Start Time      End Time      Time Diff
  A         1        08:00:00.000    08:00:00.500      .500
  B         1        09:00:00.000    09:02:00.000  2:00.000
  B         1        09:00:00.000      NaT           NaT
  A         2        09:00:00.000    09:02:00.000  2:00.000
  A         2        09:00:00.000    09:01:00.000  1:00.000
  A         2        08:00:00.000    08:00:01.500     1.500

每当我运行 df.groupby(['Group', 'Category'].median().mean() 时,任何包含 NaT 的列都会从结果集中删除。我尝试了fillna,但 NaT 似乎仍然存在。作为附加的上下文,此脚本在旧版本的 Anaconda Python (1.x) 中正常工作。我最近能够将我的工作计算机升级到 2.0.1,此时此问题开始蔓延。

编辑:如果 NaT 是一个因素,我会将我对 NaT 的想法放在上面,但经过进一步审查,我的问题似乎实际上在于这些列是 timedelta64s 的事实。有谁知道在 timedeltas 上获得平均值/中位数的任何解决方法?

非常感谢您提供的任何见解!

【问题讨论】:

  • 你有什么版本的熊猫?
  • @joris 我有熊猫 0.14.0。我确实想出了一个解决方法 - 请参阅下面的回复。

标签: python datetime pandas nat


【解决方案1】:

经过进一步的谷歌搜索/实验后,我确认该问题似乎与 timedelta64 列有关。为了在这些列上执行pd.groupby,我首先将它们转换为浮点数,如下所示:

df['End Time'] = df['End Time'].astype('timedelta64[ms]') / 86400000

可能有一个更优雅的解决方案,但这让我能够继续我的分析。

谢谢!

【讨论】:

  • 这确实是 pandas 当前的限制,有一个问题可以解决这个问题 (github.com/pydata/pandas/pull/6884),希望它会在 0.15 版本中得到解决
  • @joris 太好了,感谢您传递链接。我会密切关注这个问题。非常感谢
猜你喜欢
  • 2016-10-01
  • 2017-08-09
  • 2018-12-08
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2017-04-04
相关资源
最近更新 更多