如何在Pandas中重构DataFrame实现单地点单行的宽表格式
解决方案
可以用Pandas的pivot_table(更稳妥,支持重复组合)或pivot函数实现这种长表转宽表的转换,步骤如下:
1. 构造示例数据(模拟你的输入)
import pandas as pd data = { 'Location': ['NYC', 'Los Angeles', 'Los Angeles', 'Miami', 'Miami'], 'Contaminants': ['Chlorine', 'Lead', 'Chlorine', 'Sulfur', 'Lead'], 'Concentration': [10, 5, 2, 5, 4] } df = pd.DataFrame(data)
2. 核心转换代码
方法一:用pivot_table(推荐,兼容重复的Location+Contaminants组合)
# 生成宽表,自动填充缺失值为0 pivoted_df = df.pivot_table( index='Location', # 作为行标识的列 columns='Contaminants', # 拆分为列的字段 values='Concentration', # 填充到新列的值 aggfunc='first', # 多值组合的聚合方式(这里用first因为无重复) fill_value=0 # 缺失值填充为0 ).reset_index() # 把Location从索引转回普通列 # 重命名列,添加" Concentration"后缀匹配目标格式 pivoted_df.columns = [col if col == 'Location' else f"{col} Concentration" for col in pivoted_df.columns]
方法二:用pivot(仅当Location+Contaminants组合唯一时可用)
pivoted_df = df.pivot( index='Location', columns='Contaminants', values='Concentration' ).fillna(0) # 手动填充缺失值为0 .reset_index() # 同样重命名列 pivoted_df.columns = [col if col == 'Location' else f"{col} Concentration" for col in pivoted_df.columns]
3. 最终结果
运行后得到的pivoted_df就是目标格式:
| Location | Chlorine Concentration | Lead Concentration | Sulfur Concentration |
|---|---|---|---|
| NYC | 10 | 0 | 0 |
| Los Angeles | 2 | 5 | 0 |
| Miami | 0 | 4 | 5 |
内容的提问来源于stack exchange,提问作者SwimmerSat
相关产品推荐
相关产品推荐

