我有一个熊猫数据帧如下所示:
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]')
我的代码有什么问题?我还能使用其他方法吗?
答案 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
后,熊猫却无法正常工作的原因,为什么会出错。