我有一个旅行数据,包含每次旅行的日期时间信息和用户ID。我正在尝试创建一个名为" next_trip"的新列。使用该用户的下次旅行的日期时间信息。
这是一个名为All_Data的数据样本(熊猫数据帧):
HoraDTRetirada idpass
2016-02-17 15:36:00 39579449489
2016-02-24 19:13:00 48663837456
2016-02-26 09:20:00 72986744521
2016-02-28 12:11:00 85935174645
2016-02-28 14:55:00 11533148958
我认为这样做的方法是首先按日期时间对条目进行排序,然后对于每个不同的用户旅行,通过用户ID(idpass)过滤(通过查询)来查找他的下一次旅行。我重新索引的原因是因为我收到重复值错误。 这是我到目前为止提出的代码:
unique_ids = All_Data['idpass'].unique()
temp = All_Data.sort_values('HoraDTRetirada')
temp['index'] = np.arange(len(temp))
temp = temp.set_index('index')
for row in unique_ids:
temp["next_trip"]=temp.query('idpass == "%s"' % row)["HoraDTRetirada"].shift(-1)
我的问题与for循环有关。当我手动执行此操作并选择要在查询条件中使用的idpass值时,我得到该用户作为新列(next_trip)跳转的正确条目,但尝试使用for循环来完成此操作所有idpass值,我只得到NaTs。
感谢任何帮助。谢谢!
答案 0 :(得分:1)
您似乎需要groupby
与DataFrameGroupBy.shift
:
#data changed for no NaT output - need size of each group 2 or more
print (All_Data)
HoraDTRetirada idpass
0 2016-02-17 15:36:00 39579449489
1 2016-02-24 19:13:00 39579449489
2 2016-02-26 09:20:00 39579449489
3 2016-02-28 12:11:00 85935174645
4 2016-02-28 14:55:00 85935174645
All_Data = All_Data.sort_values('HoraDTRetirada')
All_Data['next_trip'] = All_Data.groupby('idpass')['HoraDTRetirada'].shift(-1)
print (All_Data)
HoraDTRetirada idpass next_trip
0 2016-02-17 15:36:00 39579449489 2016-02-24 19:13:00
1 2016-02-24 19:13:00 39579449489 2016-02-26 09:20:00
2 2016-02-26 09:20:00 39579449489 NaN
3 2016-02-28 12:11:00 85935174645 2016-02-28 14:55:00
4 2016-02-28 14:55:00 85935174645 NaN