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

Pandas中Pivot操作误将MSA Code转为行标签,如何保留为列?

问题分析

你想要的是把wage_keys中的工资信息匹配到smaller_df的每一行中,而不是用pivot来重塑表格结构——pivot的作用是将长表转换为宽表,会把指定的index变成行标签,这和你的需求不符。正确的操作应该是数据合并(merge),因为wage_keys本质是一个按MSA Code映射工资的字典表。

解决方案

直接使用Pandas的merge()函数,以MSA Code为关联键,将两个数据框左连接(保留smaller_df的所有行),就能得到你想要的结果:

import pandas as pd

# 执行合并操作,保留smaller_df的所有行,匹配对应MSA的工资
result_df = smaller_df.merge(wage_keys, on='MSA Code', how='left')
# 可选:将列名重命名为你期望的"Wages"
result_df = result_df.rename(columns={'Average Wage': 'Wages'})

# 查看结果
print(result_df.head())

执行后输出会和你期望的完全一致:

MSA Code Line RPP Wages
0 10180 1.0 91.2 71128.571429
1 10180 2.0 97.4 71128.571429
2 10180 3.0 78.7 71128.571429
3 10180 4.0 93.5 71128.571429
4 10420 1.0 90.4 76620.000000

为什么之前的pivot不对?

pivot(index='MSA Code', columns='Line')['RPP']会把MSA Code设为行索引,把不同的Line值作为列,将RPP的值填充进去,这是把长表转成宽表的操作,和你需要的"给每一行添加工资列"的需求完全不同。

如果因为某些原因你一定要先做pivot操作,也可以通过reset_index()把行索引变回列,再进行合并,但这属于绕路操作:

# 先pivot再重置索引
flat_df = smaller_df.pivot(index='MSA Code', columns='Line')['RPP'].reset_index()
# 再合并工资数据
result_df = flat_df.merge(wage_keys, on='MSA Code', how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:20:50