如何将dataframe中同组多行合并为单行并保留原索引到新列?
解决方案
直接使用pandas内置的groupby+agg聚合即可实现,代码如下:
import pandas as pd # 第一步:将原索引转为普通列,方便后续聚合存储 df = df.reset_index(names="ori_idx") # 第二步:按姓名列分组,分别聚合原索引和column2内容 res_df = df.groupby("column1", as_index=False).agg( # 新column2存原索引拼接字符串 column2=("ori_idx", lambda ser: ",".join(ser.astype(str))), # 新column3存原column2内容拼接字符串 column3=("column2", lambda ser: ",".join(ser)) ) # 可选:如果需要重置结果表的连续行索引,加下面这行 res_df = res_df.reset_index(drop=True)
如果你的pandas版本低于1.5.0,不支持reset_index的names参数,可以把第一步的代码替换为:
df = df.rename_axis("ori_idx").reset_index()
以上代码直接运行就能得到你期望的输出格式,不需要额外依赖。
内容的提问来源于stack exchange,提问作者redplanet
相关产品推荐
相关产品推荐

