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

问题描述 投票:1回答:1

在熊猫中执行df.groupby().sum()时,nan意外地转换为0。在GitHub ticket中已注意到这一点。凭单表明使用groupby().sum(min_count=1)将正确返回预期的nan。不幸的是,它似乎不适用于时间增量(请参阅下面的完整示例)。

是否有解决方法,如何将timedelta字段中的nan保留在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
python pandas pandas-groupby timedelta
1个回答
0
投票

找到了解决方法,即使用

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

而不是

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

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