:)
我有这个数据集:
r = pd.DataFrame({'duplicates': [ [("007", "us1", "us2", 7, 1), ("001", "us1", "us2", 9, 8), ("009", "us1", "us2", 28, 27)], ("007", "us2", "us1", 8, 15), ("009", "us4", "us1", 29, 30), ("009", "us4", "us1", 29, 30)],
'id': ["b", 'c', 'b', "c"]})
duplicates id
0 [(007, us1, us2, 7, 1), (001, us1, us2, 9, 8), (009, us1, us2, 28, 27)] b
1 (007, us2, us1, 8, 15) c
2 (009, us4, us1, 29, 30) b
3 (009, us4, us1, 29, 30) c
此处,元组根据us1,us2顺序分组。因此,如果元组具有相同的“ id”和相同的用户序列,则它们位于同一行中。例如,在第一行中,us2在时间7访问记录007。同样,us1在时间01访问记录007。
我想要的是这个
j = pd.DataFrame({'duplicates': [ ("007", ['us2', 'us1', 'us2', 'us1'], 1, 7, 8, 15), ("001", ['us2', 'us1'], 8, 9), ("009", ['us2', 'us1', 'us4', 'us1'], 27, 28, 29, 30), ("009", ['us4', 'us1'], 29, 30)],
'id': ["b", "b", 'b', "c"]})
duplicates id
0 (007, [us2, us1, us2, us1], 1, 7, 8, 15) b
1 (001, [us2, us1], 8, 9) b
2 (009, [us2, us1, us4, us1], 27, 28, 29, 30) b
3 (009, [us4, us1], 29, 30) c
在这种情况下,我想按ID和元组的第一部分进行分组。例如,在第一行中,我使用“ 007”和“ id”作为键,然后根据时间访问来添加用户。所以us2在us1之前,因为us2在时间1访问,而us1在时间7访问,而1 <7。
这是我到目前为止所拥有的,但是与结果相去甚远,我不知道该怎么办:
r.explode('duplicates').groupby(['id', r['duplicates'].str[0]])['duplicates'].apply(list).reset_index(level=1, drop=True).reset_index()
非常感谢!