Python Pandas Groupby 删除日期时间列

问题描述 投票:0回答:2

我在包含间歇性 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 的想法留在上面,但经过进一步审查,我的问题似乎实际上在于这些列是 timedelta64。有谁知道有什么解决方法可以获取时间增量的平均值/中位数吗?

非常感谢您的任何见解!

python datetime pandas nat
2个回答
1
投票

经过进一步的谷歌搜索/实验,我确认问题似乎与

timedelta64
的列有关。为了在这些列上执行
pd.groupby
,我首先将它们转换为浮点数,如下所示:

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

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

谢谢!


0
投票

对于最终到达这里的任何人来说,这个错误似乎已经在 Pandas 版本 1.3.4 和版本 2.2.0 之间的某个地方得到了修复(我方便测试的两个版本),但我不确定何时或如何修复,而且它是上面的 PR 中没有提到。

所以,如果可能的话,更新你的 Pandas,它应该可以修复它。

如果有人知道,他们可以把修复发生的时间放在这里以供将来使用吗?

© www.soinside.com 2019 - 2024. All rights reserved.