在熊猫中执行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
找到了解决方法,即使用
res=df.groupby(level=0).apply(lambda x: x.sum(min_count=1))
而不是
res=df.groupby(level=0).sum(min_count=1)