将群组折叠成一行pandas数据帧

时间:2018-06-06 18:56:08

标签: python pandas

我有一个数据框如下:

         id                     timestamp            name
         1                  2018-01-23 15:49:53     "aaa"
         1                  2018-01-23 15:54:56     "bbb"
         1                  2018-01-23 15:49:57     "bbb"
         1                  2018-01-23 15:49:54     "ccc"

这是我数据中的一组id的一个示例。我有几组ID。 我想要做的是将每个组折叠成一行,但按照时间顺序按时间顺序折叠,例如像这样

         id                       name   
          1                   aaa->ccc->bbb->bbb

名称中的值按时间顺序排列,因为它们带有时间戳。有关于此的任何指示?

1 个答案:

答案 0 :(得分:2)

我也可以自由地为你的df添加一些数据:

print(df)

输出:

   id   timestamp   name
0   1   2018-01-23T15:49:53 aaa
1   1   2018-01-23T15:54:56 bbb
2   1   2018-01-23T15:49:57 bbb
3   1   2018-01-23T15:49:54 ccc
4   2   2018-01-23T15:49:54 ccc
5   2   2018-01-23T15:49:57 aaa

然后你需要:

df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.sort_values(['id', 'timestamp'])
grp = df.groupby('id')['name'].aggregate(lambda x: '->'.join(tuple(x))).reset_index()
print(grp)

输出:

    id  name
0   1   aaa->ccc->bbb->bbb
1   2   ccc->aaa