带有时间戳错误的熊猫的两个连续行之间的天数:dtype('<m8 [d]')

时间:2019-04-11 12:29:24

标签: python pandas pandas-groupby

=“”

我有一个熊猫数据帧如下所示:

device_id   date
101        2018-10-30 10:42:32
101        2018-12-20 14:14:14
102        2018-09-26 14:21:33
102        2018-10-24 09:12:35
102        2018-11-12 04:52:21

我的预期输出是

device_id      date                  diff
    101        2018-10-30 10:42:32   0
    101        2018-12-20 14:14:14   51
    102        2018-09-26 14:21:33   0
    102        2018-10-24 09:12:35   28
    102        2018-11-12 04:52:21   19

我使用了以下代码:

df['exdate_1'] = df['date'].dt.date      
df['exdate_1'] = df.groupby('device_id')['exdate_1'].apply(lambda x: x.sort_values())    
df['diff'] = df.groupby('device_id')['exdate_1'].diff() / np.timedelta64(1, 'D')

但是我收到类似以下的错误

TypeError: ufunc true_divide cannot use operands with types dtype('float64') 
and dtype('<m8[D]')

我的代码有什么问题?我还能使用其他方法吗?

1 个答案:

答案 0 :(得分:2)

Series.dt.floor用于没有时间的日期时间,然后将DataFrame.sort_values分成多列,并转换为天,请使用您的解决方案或使用Series.dt.days的替代方法:

df['exdate_1'] = df['date'].dt.floor('d') 
df = df.sort_values(['device_id','exdate_1'])
df['diff'] = df.groupby('device_id')['exdate_1'].diff().dt.days.fillna(0).astype(int)
print (df)
   device_id                date   exdate_1  diff
0        101 2018-10-30 10:42:32 2018-10-30     0
1        101 2018-12-20 14:14:14 2018-12-20    51
2        102 2018-09-26 14:21:33 2018-09-26     0
3        102 2018-10-24 09:12:35 2018-10-24    28
4        102 2018-11-12 04:52:21 2018-11-12    19

df.date对象返回python date后,熊猫却无法正常工作的原因,为什么会出错。