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

如何用Python将字符串列拆分为12个独立月份列?

用Python Pandas实现月份数据的宽表转换

这需求用Pandas来处理非常顺手,我给你一步步拆解实现方法:

步骤1:准备环境与示例数据

首先导入Pandas,然后把你的示例数据转换成DataFrame:

import pandas as pd

# 示例数据
data = {
    'ID': [1, 2, 3, 4],
    'Month': ['Jan;Feb', 'Mar;Apr;Jun;Jul;Aug;Nov', 'Jan;May;Oct;Dec', 'Apr;May;Sep;Oct']
}
df = pd.DataFrame(data)

步骤2:创建月份与目标列的映射

先定义一个字典,把英文月份对应到M_1到M_12:

month_col_map = {
    'Jan': 'M_1', 'Feb': 'M_2', 'Mar': 'M_3', 'Apr': 'M_4',
    'May': 'M_5', 'Jun': 'M_6', 'Jul': 'M_7', 'Aug': 'M_8',
    'Sep': 'M_9', 'Oct': 'M_10', 'Nov': 'M_11', 'Dec': 'M_12'
}

步骤3:拆分月份并转换列名

把Month列按分号拆分,然后展开成多行,再用映射字典把月份转成对应的目标列名:

# 拆分月份列并展开为多行
df_expanded = df.assign(Month=df['Month'].str.split(';')).explode('Month')
# 添加目标列名列,用于后续透视
df_expanded['target_col'] = df_expanded['Month'].map(month_col_map)

步骤4:透视成宽表并整理格式

用透视表把数据转换成你需要的宽表结构,然后填充缺失值为NA,最后调整列顺序确保符合要求:

# 生成透视表:ID作为行索引,target_col作为列,Month作为填充值
result = df_expanded.pivot(index='ID', columns='target_col', values='Month')
# 填充缺失值为NA,把ID从索引变回普通列
result = result.fillna('NA').reset_index()
# 强制列顺序为ID + M_1到M_12
target_columns = ['ID'] + [f'M_{i}' for i in range(1, 13)]
result = result[target_columns]

最终效果

运行完上面的代码后,result就是你想要的结构:

ID M_1  M_2  M_3  M_4  M_5  M_6  M_7  M_8  M_9 M_10 M_11 M_12
0   1 Jan  Feb   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
1   2  NA   NA  Mar  Apr   NA  Jun  Jul  Aug   NA   NA  Nov   NA
2   3 Jan   NA   NA   NA  May   NA   NA   NA   NA  Oct   NA  Dec
3   4  NA   NA   NA  Apr  May   NA   NA   NA  Sep  Oct   NA   NA

如果你的数据是从CSV/Excel等文件读取的,只需要把第一步的data换成pd.read_csv('你的文件路径')或者pd.read_excel('你的文件路径')就行,核心逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:12:58