pandas如何按指定列分组后将term_type转列并拼接对应term值
Pandas宽表转换实现方案
你之前使用pivot_table失败的核心原因是pivot_table默认聚合函数为平均值,不支持字符串拼接,指定对应聚合规则即可实现需求,以下是两种可直接运行的实现方式:
方式1:直接使用pivot_table实现
import pandas as pd # 原始DataFrame df = pd.DataFrame( { "id": [1, 1, 2, 2], "name": ["alpha", "alpha", "bravo","bravo"], "term_type": ["hist", "hist", "hist", "bio"] , "term": ["delta9", "delta10", "delta1", "alpha1"] }) result = df.pivot_table( index=["id", "name"], # 按id、name分组作为行索引 columns="term_type", # term_type的取值作为新列名 values="term", # 列值取自term字段 aggfunc="||".join # 同分组同类型的term用||拼接 ).reset_index() # 将id、name从索引转为普通列 # 可选:如果需要name首字母大写匹配示例格式,可加此行 result["name"] = result["name"].str.capitalize()
方式2:groupby+unstack显式分组实现
逻辑更清晰,适合需要对分组结果做额外处理的场景:
result = df.groupby(["id", "name", "term_type"])["term"]\ .agg("||".join)\ .unstack("term_type")\ .reset_index()
两种方式输出的结果完全匹配你需要的格式,无匹配值的位置默认返回NaN。
内容的提问来源于stack exchange,提问作者HoneyBadger786
相关产品推荐
相关产品推荐

