如何将多城市污染物数据的宽格式Pandas DataFrame转换为长格式?
解决Pandas宽表转长表的方法
Hey there! 要把你给出的宽格式DataFrame转换成目标长格式,用Pandas内置的melt()方法就能完美实现,这是处理这类数据重塑需求的常规操作,下面一步步来:
1. 先构造原始宽格式DataFrame
首先我们先复现你给出的宽表数据:
import pandas as pd df_wide = pd.DataFrame({ 'Pollutant': ['PM25', 'Ozone', 'NO2'], 'Delhi': [12, 120, 192], 'London': [36, 34, 35], 'Paris': [43, 42, 12] })
2. 使用melt()进行格式转换
核心代码就这几行,参数设置很直观:
df_long = df_wide.melt( id_vars='Pollutant', # 指定不需要被重塑的标识列,这里就是污染物名称 var_name='City', # 把原来的城市列名映射成新列的名称 value_name='Level' # 把原来各城市列的数值映射成新列的名称 )
3. 转换结果说明
执行完上面的代码后,df_long就是你想要的长格式DataFrame:
| Pollutant | City | Level |
|---|---|---|
| PM25 | Delhi | 12 |
| Ozone | Delhi | 120 |
| NO2 | Delhi | 192 |
| PM25 | London | 36 |
| Ozone | London | 34 |
| NO2 | London | 35 |
| PM25 | Paris | 43 |
| Ozone | Paris | 42 |
| NO2 | Paris | 12 |
简单说下melt()的逻辑:它会把指定的非标识列(这里是Delhi、London、Paris)“融化”成两列——一列存原来的列名(City),一列存对应的值(Level),同时保留标识列(Pollutant)的每行数据和新列对应匹配。
内容的提问来源于stack exchange,提问作者Simon C
相关产品推荐
相关产品推荐

