如何用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
相关产品推荐
相关产品推荐

