Python DataFrame行列转换:将城市转列、投诉类型转行,求替代方法
其他实现方法
下面是几种能实现你需求的替代方案,核心都是将Complaint Type设为行、City设为列,基于Unique Key完成聚合统计:
1. 使用pivot方法
如果你的(Complaint Type, City)组合没有重复值(即每个投诉类型在单个城市下仅对应一条记录),可以直接用pivot,语法更简洁:
df_new = df.pivot(index='Complaint Type', columns='City', values='Unique Key')
要是存在重复组合,pivot无法直接指定聚合逻辑,这时候还是推荐用你原有的pivot_table或下面的方案。
2. 使用pd.crosstab
crosstab是Pandas专门用于生成交叉表的工具,默认会对分组后的记录计数。如果你需要统计各投诉类型在不同城市的投诉数量(用Unique Key的数量体现),可以这么写:
import pandas as pd df_new = pd.crosstab(index=df['Complaint Type'], columns=df['City'], values=df['Unique Key'], aggfunc='count')
如果不需要计数,而是要保留Unique Key的其他聚合结果(比如取每组第一个值),把aggfunc换成对应函数即可,比如aggfunc='first'。
3. 使用groupby + unstack
先按行、列维度分组完成聚合,再用unstack把City从行索引展开为列:
# 以计数为例,可替换为你需要的聚合逻辑 df_new = df.groupby(['Complaint Type', 'City'])['Unique Key'].count().unstack('City')
如果要收集每组下所有的Unique Key,可以用agg(list):
df_new = df.groupby(['Complaint Type', 'City'])['Unique Key'].agg(list).unstack('City')
内容的提问来源于stack exchange,提问作者MEGHA
相关产品推荐
相关产品推荐

