python - 带有时间戳错误的熊猫中两个连续行之间的天数: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
对象之后,而熊猫使用它的效果很差。
解决方案
用于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
对象之后,而熊猫使用它的效果很差。
推荐阅读
- sql - 使用子字符串将 nvarchar 转换为 datetime 时出现意外结果
- python - 以有效的方式将python列表转换为逗号分隔的字符串
- php - 扩展 Laravel Blade 时如何将变量传递给指令?
- javascript - 如何在量角器中使用打字稿发送带附件的电子邮件?
- c# - excel 样式的单独 URL 和数据 =HYPERLINK 字段
- python - 机器人框架为什么要在命令字符串中加引号?
- database - 在 MacO 上设置 LC_COLLATE 和 LC_CTYPE
- python - Python IMAP 下载所有附件
- angular - Angular 是否会记住内联 *ngIf 条件语句?
- python - 从图像中切出或移除遇到蒙版黑色像素的像素
我有一个如下的熊猫数据框:
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
对象之后,而熊猫使用它的效果很差。
解决方案
用于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
对象之后,而熊猫使用它的效果很差。
推荐阅读
- sql - 使用子字符串将 nvarchar 转换为 datetime 时出现意外结果
- python - 以有效的方式将python列表转换为逗号分隔的字符串
- php - 扩展 Laravel Blade 时如何将变量传递给指令?
- javascript - 如何在量角器中使用打字稿发送带附件的电子邮件?
- c# - excel 样式的单独 URL 和数据 =HYPERLINK 字段
- python - 机器人框架为什么要在命令字符串中加引号?
- database - 在 MacO 上设置 LC_COLLATE 和 LC_CTYPE
- python - Python IMAP 下载所有附件
- angular - Angular 是否会记住内联 *ngIf 条件语句?
- python - 从图像中切出或移除遇到蒙版黑色像素的像素