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

如何转换DataFrame结构:以岛屿为行索引,月份+年份为列名

解决方案

可以通过转置DataFrame、调整索引层级、拼接时间标签这几个步骤实现需求,具体代码如下:

# 先将带逗号的字符串数值转为浮点型
df = df.replace(',', '', regex=True).astype(float)

# 转置DataFrame,交换行与列的层级
df_transposed = df.T.swaplevel(0, 1).sort_index()

# 拼接月份与年份作为列名,同时设置岛屿为行索引
result = df_transposed.T.set_index(df_transposed.columns.get_level_values(0))
result.columns = result.columns.get_level_values(1) + result.columns.get_level_values(0)

# 调整列的顺序(按月份从JAN到DEC,年份从2022到2023)
month_order = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
year_order = ['2022', '2023']
sorted_columns = [f"{m}{y}" for y in year_order for m in month_order]
result = result[sorted_columns]

代码说明

  1. 数值格式转换:原DataFrame中的值是带千分位逗号的字符串,先去掉逗号并转为浮点型,确保后续操作正常。
  2. 转置与层级交换:通过T转置后,用swaplevel交换列的层级(把年份和岛屿的层级调换),再排序索引让同一年份的月份集中。
  3. 拼接列名:提取月份和年份的索引值,拼接成JAN2022这类格式作为新列名,同时将岛屿设置为行索引。
  4. 列排序:按照月份和年份的顺序重新排列列,保证列顺序符合从2022年1月到2023年12月的逻辑。

最终结果示例

执行后得到的result结构如下:

JAN2022  FEB2022  MAR2022  APR2022  MAY2022  JUN2022  JUL2022  AUG2022  SEP2022  OCT2022  NOV2022  DEC2022  JAN2023  FEB2023  MAR2023  APR2023  MAY2023  JUN2023  JUL2023  AUG2023  SEP2023  OCT2023  NOV2023  DEC2023
Island                                                                                                                        
St Thomas    55086.0  57929.0  72103.0  67469.0  60092.0  67026.0  66353.0  50660.0  24507.0  34025.0  44500.0  58735.0  60470.0  56826.0  64249.0  56321.0  49534.0  56950.0  61110.0  42745.0  25047.0  34462.0      NaN      NaN
St. Croix    11550.0  12441.0  14094.0  12196.0  13385.0  14009.0  13768.0  10673.0   6826.0  10351.0   9635.0  12661.0  12755.0  13289.0  15880.0  13092.0  16497.0  15728.0  16879.0  12102.0   6298.0   9398.0      NaN      NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:43:26