将组折叠成一行 Pandas 数据框

Cyb*_*unk 3 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"
Run Code Online (Sandbox Code Playgroud)

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

         id                       name   
          1                   aaa->ccc->bbb->bbb
Run Code Online (Sandbox Code Playgroud)

name 中的值按时间顺序排列,因为它们与时间戳一起出现。关于这个的任何指示?

har*_*pan 6

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

print(df)
Run Code Online (Sandbox Code Playgroud)

输出:

   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
Run Code Online (Sandbox Code Playgroud)

那么你需要:

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)
Run Code Online (Sandbox Code Playgroud)

输出:

    id  name
0   1   aaa->ccc->bbb->bbb
1   2   ccc->aaa
Run Code Online (Sandbox Code Playgroud)