如何按索引聚合指定列字符串并保留DataFrame其余列数据?
你可以使用 Pandas 的 groupby() + transform() 组合实现需求,transform 会将分组聚合后的结果映射回组内每一行,不会改变原数据的行数,也不会丢弃未参与聚合的列,完全匹配你的需求。
代码示例
1. 单字段拼接实现
import pandas as pd # 构造你的示例数据 df = pd.DataFrame({ 'ID': [1,1,2,2], 'Var1': ['row1', 'row2', 'row4', 'row5'], 'Var2': ['abc', 'bcd', 'def', 'tss'], 'Var3': [321, 456, 555, 889] }) # 按ID分组,拼接Var1列的字符串 df['Var1'] = df.groupby('ID')['Var1'].transform(lambda x: ', '.join(x))
2. 多字段批量拼接
如果你有多个列需要按ID分组拼接,只需把要处理的列名放入列表循环处理即可,未放入列表的列会保留原始值不变:
# 此处填入所有需要按ID拼接的列名 need_concat_cols = ['Var1', 'Var2'] for col in need_concat_cols: df[col] = df.groupby('ID')[col].transform(lambda x: ', '.join(x))
补充说明
你之前用普通聚合操作会丢失列,是因为常规的agg()聚合会为每个分组仅返回1行结果,同组内值不同的非聚合字段会被默认丢弃,transform 正好规避了这个问题。
内容的提问来源于stack exchange,提问作者Jayne How
相关产品推荐
相关产品推荐

