如何在Pandas中透视DataFrame并合并重复交叉项?
解决方案
要实现你需要的透视并合并重复交叉项的效果,可以通过分组聚合+透视的方式完成,以下是两种可行的Pandas实现方案:
方法一:groupby 配合 unstack
import pandas as pd # 构造你的原始DataFrame df = pd.DataFrame({ 'Column A': ['boo', 'boo', 'boo', 'boo'], 'Column B': ['ptype', 'tecnh', 'ptype', 'staaa'], 'Column C': ['123', '34e', '34w', '45r'] }) # 按Column A和Column B分组,将同组的Column C内容用逗号拼接 grouped_data = df.groupby(['Column A', 'Column B'])['Column C'].apply(','.join).unstack() # 将索引转换为普通列,得到目标结构 final_result = grouped_data.reset_index() print(final_result)
方法二:直接使用 pivot_table
import pandas as pd df = pd.DataFrame({ 'Column A': ['boo', 'boo', 'boo', 'boo'], 'Column B': ['ptype', 'tecnh', 'ptype', 'staaa'], 'Column C': ['123', '34e', '34w', '45r'] }) # 用透视表指定聚合逻辑:对相同交叉项的Column C做逗号拼接 final_result = df.pivot_table( index='Column A', columns='Column B', values='Column C', aggfunc=lambda x: ','.join(x), fill_value='' ).reset_index() # 移除列名的多级索引标识 final_result.columns.name = None print(final_result)
说明
你之前尝试的line.apply(lambda row: ','.join(row.values.astype(str)), axis=1)是对整行所有列内容进行拼接,不符合需求。我们需要的是针对同一Column A+Column B组合下的Column C值进行聚合拼接,再通过透视转换为目标列结构。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

