繁体   English   中英

为 timedelta 字段的 pandas.groupby().sum() 返回 NaN

[英]Return NaN for pandas.groupby().sum() of timedelta fields

df.groupby().sum()执行df.groupby().sum()时, nan意外转换为 0。 这已在此GitHub 票证 中注明。 该票表明使用groupby().sum(min_count=1)将正确返回预期的nan 不幸的是,它似乎不适用于 timedeltas(请参阅下面的完整工作示例)。

是否有关于如何将 nan 保留在 timedelta 字段的groupy().sum()中的解决方法?

import pandas as pd
from datetime import datetime, date, timedelta

data = [[date(year=2020,month=2,day=1), timedelta(hours=1, minutes=10),timedelta(hours=2, minutes=10) ],
    [date(year=2020,month=2,day=2), None,    timedelta(hours=2, minutes=10) ],
    [date(year=2020,month=2,day=3), timedelta(hours=1, minutes=10),timedelta(hours=2, minutes=10) ],
    [date(year=2020,month=2,day=3), timedelta(hours=1, minutes=10),timedelta(hours=2, minutes=10) ]
    ] 

df = pd.DataFrame(data, columns = ['date', 'duration', 'total']) 
df.set_index(pd.DatetimeIndex(df['date']), inplace=True)

res=df.groupby(level=0).sum(min_count=1)
display(res)

预期的:

date  | duration | total
2020-02-01 | 01:10:00 | 02:10:00
2020-02-02 | NaT | 02:10:00
2020-02-03 | 02:20:00 | 04:20:00

但是得到

date  | duration | total
2020-02-01 | 01:10:00 | 02:10:00
2020-02-02 | 00:00:00| 02:10:00
2020-02-03 | 02:20:00 | 04:20:00

找到了一个解决方法,即使用

res=df.groupby(level=0).apply(lambda x: x.sum(min_count=1))

代替

res=df.groupby(level=0).sum(min_count=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM