我有一个如下的熊猫数据框:

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-1,python,pandas,pandas-groupby"/>
	














首页 > 解决方案 > 带有时间戳错误的熊猫中两个连续行之间的天数:dtype('

我有一个如下的熊猫数据框:

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-1

问题描述

我有一个如下的熊猫数据框:

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]')

我的代码有什么问题?我也可以使用任何其他方法吗?


用于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对象之后,而熊猫使用它的效果很差。

标签: pythonpandaspandas-groupby

解决方案


用于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对象之后,而熊猫使用它的效果很差。


推荐阅读