我有一个df,所以
LAST_MOD_DATE ID TITLE TXT_ID TXT
0 1486047205463 2 TITLE-2 7 ABC
1 1486047205463 2 TITLE-2 5 XYZ
2 1486047205463 2 TITLE-2 6 MNQ 我想按ID对其进行分组,以便将其展平为单行。具有不同值的字段TXT_ID和TXT将合并为一个具有逗号分隔值的字段。因此,如下所示:
ID
2 1486047205463 TITLE-2 7, 5, 6 ABC, XYZ, MNQ我只能通过以下方式获取单个列:
df.groupby('ID')['TXT'].apply(lambda x:', '.join(x))但是如何在整个df上这样做,以便我可以有选择地连接一些列,同时只选择相同组中其他列的顶值。现在,我通过将这些值聚合为一个集合,然后为某些列扩展该集合来完成此操作。但这似乎并不是很有效
发布于 2017-02-04 04:16:35
使用agg并提供要应用于每列的函数。这里我给你一个混合的例子,我只对'ID‘进行分组,以说明如何获取'TITLE’上的第一个元素,但你可以针对它对你的样本进行分组(这可能不是你有的一般情况:
df.groupby('ID').agg({'TITLE':'first',
'TXT_ID':lambda x:', '.join(x),
'TXT':lambda x:', '.join(x)})
Out[288]:
TITLE TXT_ID TXT
ID
2 TITLE-2 7, 5, 6 ABC, XYZ, MNQhttps://stackoverflow.com/questions/42031919
复制相似问题