for循环中的熊猫查询条件

时间:2017-06-29 06:12:02

标签: python-3.x pandas anaconda

我有一个旅行数据,包含每次旅行的日期时间信息和用户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。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎需要groupbyDataFrameGroupBy.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