Pandas Groupby分组后如何将列表数据拆分为多列合并展示?
实现人员多地址记录合并行的Pandas解决方案
你原有代码的核心错误是Step2中用str.split()拆分拼接字符串时,地址、城市字段包含空格,会把单个字段拆分为多个列表元素,导致后续字段错位,同时groupby未携带First Name字段,会丢失该维度信息。
以下是可直接运行得到预期结果的完整代码:
import pandas as pd import numpy as np # 读取剪贴板数据 df = pd.read_clipboard() # 给同一用户的多条记录添加序号(从1开始计数) df["idx"] = df.groupby(["AccountID", "Last Name", "First Name"]).cumcount() + 1 # 转换为宽表,按序号展开对应字段 df_wide = df.set_index(["AccountID", "Last Name", "First Name", "idx"]).unstack() # 整理列名,添加序号后缀 df_wide.columns = [f"{col[0]}_{col[1]}" for col in df_wide.columns] # 重置索引得到基础结果 df_res = df_wide.reset_index() # 调整列顺序匹配你需要的输出格式 expected_cols = ["AccountID", "Last Name", "First Name"] for i in range(1, df["idx"].max()+1): expected_cols.extend([f"Contract_{i}", f"Address_{i}", f"City_{i}", f"State_{i}"]) df_res = df_res[expected_cols] # 若需要空值显示为空字符串而非NaN,可开启下一行 # df_res = df_res.fillna('') print(df_res)
内容的提问来源于stack exchange,提问作者Joe Stuart
相关产品推荐
相关产品推荐

