2014-09-06 154 views
0

我在包含间歇性NaT值的DataFrame上使用groupby.median()和groupby.mean()时遇到了一些麻烦。具体来说,我有一个数据集中的几列来计算基于其他列的各种时间差异。在某些情况下,没有时间存在差异,从而导致类似下面的例子在NAT值:Python Pandas Groupby删除日期时间列

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上面的想法,如果他们是一个因素,但经过进一步的审查,似乎我的问题实际上在于这些列是timedelta64s。有没有人知道任何解决方法来获取timedeltas的平均数/中位数?

非常感谢您的任何见解!

+0

你有什么版本的熊猫? – joris 2014-09-06 08:34:42

+0

@joris我有熊猫0.14.0。我确实想出了一个解决方法 - 请参阅下面的回复。 – wrcobb 2014-09-06 15:28:39

回答

0

经过一些进一步的谷歌搜索/实验后,我确认这个问题似乎与列号为timedelta64有关。为了对这些列执行pd.groupby我首先将它们转换为浮动像这样:

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

有可能是一个更优雅的解决方案,这一点,但这个让我与我的分析前进。

谢谢!

+1

这确实是大熊猫的当前局限性,有一个问题需要解决(https://github.com/pydata/pandas/pull/6884),希望它能得到版本0.15 – joris 2014-09-06 16:07:24

+0

@joris很好,谢谢你的传球沿着链接。我会密切关注这个问题。非常感激 – wrcobb 2014-09-06 17:02:37