首页 > 解决方案 > Python多索引合并值

问题描述

我的问题是我有一个包含 3 个键、标志、开始时间和 ID 的字典列表。我正在尝试实现一种方式,在列表中首先按标志排序,然后按开始时间和 ids 排序。我的示例列表:

[{'flag': '143', 'startTime': '2020/02/09/10', 'id': '143'},
 {'flag': '118', 'startTime': '2020/02/08/09', 'id': '118'},
 {'flag': '138', 'startTime': '2020/02/09/05', 'id': '138'},
 {'flag': '144', 'startTime': '2020/02/09/11', 'id': '144'},
 {'flag': '19', 'startTime': '2020/02/04/06', 'id': '19'}]

我尝试创建一个数据框,然后使用标志和开始时间设置索引

temp = df.set_index(['flag', 'startTime'])

我得到的样本温度是:

flag starttime     id
0   2020/02/03/11   0
    2020/02/03/11   0
1   2020/02/03/12   1
    2020/02/03/12   1
3   2020/02/03/14   3
    ... ... ...
140 2020/02/09/07   140
141 2020/02/09/08   141
142 2020/02/09/09   142
143 2020/02/09/10   143
144 2020/02/09/11   144

我想要实现的是,对于标志 1 和开始时间 2020/02/03/03,可以说如果有 3 个 id 1、2、3,那么我的数据框应该类似于:

flag sttarttime    id 
   1    2020/02/03/03 1,2,3
   2    2020/02/04/02 9,8,5 etc...

有人可以帮我吗?非常感谢您对此的任何帮助。几周以来我一直为此发疯。提前致谢。

标签: pythonpandasnumpydataframesorting

解决方案


你可以试试这个:

df.groupby(['flag','startTime'])['id'].apply(lambda x: ','.join(x)).reset_index()

或者如果你想要它作为列表:

df.groupby(['flag','startTime'])['id'].apply(list).reset_index()

推荐阅读