我需要输出一个列,该列将指示每个用户(user_id)的第二个事件的时间。该列应该与列‘second_event’相同。我创建了一个新的DataFrame,其中添加了每个用户的所有第二个事件。然后,我向同一个DataFrame添加了一个列,其中添加了每个用户的第二个事件的时间。然后,我根据'time‘列对它们进行排序,并使用merge_asof方法组合它们。我得到一个错误: MergeError:不兼容的合并dtype,dtype('O')和dtype('O'),双方都必须有数字dtype。你能告诉我如何在我的情况下纠正错误吗?
这是我的密码
import pandas as pd
data = pd.read_csv('file_path')
sessions_start_user = data[data['events_ordinal_number'] == 2]
sessions_start_user['second_time'] = sessions_start_user['time']
data = data.sort_values('time')
sessions_start_user = sessions_start_user.sort_values('time')
data = pd.merge_asof(data,sessions_start_user[['time','user_id','second_time']],on='time',by='user_id')这是我原始数据框架(数据)的一部分。
Unnamed: 0 time user_id type amount target feature1 feature2 events_ordinal_number second_event_time loan_ordinal_number events_time_diff previous_loans_max_amount
0 0 2001-01-01 00:00:00 114 loanRequest 14651 NaN 1 1 1 2001-01-25 05:00:00 1 NaN NaN
1 1 2001-01-01 01:00:00 199 loanRequest 13398 NaN 0 0 1 2001-01-08 01:00:00 1 NaN NaN
2 2 2001-01-01 02:00:00 717 loanRequest 14525 NaN 0 0 1 2001-01-09 16:00:00 1 . NaN NaN
3 3 2001-01-01 03:00:00 66 loan 14437 1.0 1 1 1 2001-03-27 17:00:00 1 NaN NaN
4 4 2001-01-01 04:00:00 584 loanRequest 15861 NaN 1 0 1 2001-01-05 10:00:00 1 NaN NaN这是其中一个用户的数据显示的一部分,在"events_ordinal_number“列中指示每个用户的所有事件的序列号。
Unnamed: 0 time user_id type amount target feature1 feature2 events_ordinal_number second_event_time loan_ordinal_number events_time_diff previous_loans_max_amount
0 0 2001-01-01 00:00:00 114 loanRequest 14651 NaN 1 1 1 2001-01-25 05:00:00 1 NaN NaN
581 581 2001-01-25 05:00:00 114 loanRequest 13611 NaN 1 0 2 2001-01-25 05:00:00 1 24 days 05:00:00 NaN
624 624 2001-01-27 00:00:00 114 loanRequest 14515 NaN 1 0 3 2001-01-25 05:00:00 1 1 days 19:00:00 NaN我也这样做,索引被调整到正确的顺序,但是错误仍然存在:
sessions_start_user=pd.concat([sessions_start_user, sessions_start_user.reset_index(drop=True, inplace=True)], axis=1)谢谢。
发布于 2022-02-28 08:08:19
您应该首先将time列转换为日期时间-- pd.merge_asof不适用于字符串列。来自文档
on:要加入的字段名。必须在两个DataFrames中找到。必须对数据进行排序。此外,这必须是一个数值列,如datetimelike、整型或浮点数。
添加
data["time"] = pd.to_datetime(data["time"])到了你的脚本开始的时候就应该做到这一点。
https://stackoverflow.com/questions/71284238
复制相似问题