You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas的Melt/Pivot重塑DataFrame至目标格式?

Pandas宽表转指定长格式并聚合实现方案

模拟样本数据

先还原你可能的宽格式数据场景(若实际数据结构不同,可对应调整):

import pandas as pd

# 示例宽表:Regierungsviertel有多条Raub记录,平均值为41.33
df_wide = pd.DataFrame({
    'Region': ['Regierungsviertel', 'Regierungsviertel', 'Regierungsviertel', 'Mitte', 'Pankow'],
    'Raub': [40, 42, 42, 35, 38],
    'Diebstahl': [120, 130, 115, 100, 95],
    'Brand': [5, 7, 6, 4, 3]
})

两种可行实现方式

方式1:先聚合宽表,再转长格式

先对同区域的同类型犯罪做聚合(这里用平均值得到41.33),再用melt重塑:

# 按Region分组,计算各犯罪类型的均值
aggregated = df_wide.groupby('Region').mean().reset_index()

# 重塑为目标长格式
result = pd.melt(
    aggregated,
    id_vars='Region',
    var_name='Crimes',
    value_name='count'
)

# 保留两位小数确保数值显示为41.33
result['count'] = result['count'].round(2)

方式2:先转长格式,再聚合

先把宽表拆成每条记录对应一个区域-犯罪类型的结构,再分组聚合:

# 先转长格式
melted = pd.melt(
    df_wide,
    id_vars='Region',
    var_name='Crimes',
    value_name='count'
)

# 按Region和Crimes分组计算均值
result = melted.groupby(['Region', 'Crimes'])['count'].mean().reset_index()
result['count'] = result['count'].round(2)

关键说明

  • 若41.33不是平均值,而是其他统计量(如总和、加权平均),替换mean()为对应函数即可
  • melt的参数要对应:id_vars指定要保留的分组列(Region),var_name是原宽表列名要转成的新列名(Crimes),value_name是数值列的名称(count)
  • 最终结果中,Regierungsviertel的Raub值会精确显示为41.33

内容的提问来源于stack exchange,提问作者0004

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:30:07