Pandas:在分组数据框中仅连接选定列中的值的有效方法
Pandas: Efficient way to join values in only selected columns in a grouped dataframe
我有一个 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 上执行此操作,以便我可以有选择地加入某些列,同时只选择同一组中其他列的最高值。现在我正在通过将值聚合为一个集合然后为某些列扩展集合来做到这一点。但这似乎不是很有效
使用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, MNQ
我有一个 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 上执行此操作,以便我可以有选择地加入某些列,同时只选择同一组中其他列的最高值。现在我正在通过将值聚合为一个集合然后为某些列扩展集合来做到这一点。但这似乎不是很有效
使用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, MNQ