如何用Python将DataFrame中某列部分值拆分至单独列?
实现方法
可以用Pandas的wide_to_long或者melt+拆分+透视两种方式来实现,以下是具体步骤:
1. 模拟原始数据(对应你提供的输入DataFrame)
先构造和你输入结构一致的示例数据:
import pandas as pd df = pd.DataFrame({ 'CA_population': [39538223], 'CA_murder_rate': [6.3], 'TX_population': [29145505], 'TX_murder_rate': [8.6], 'NY_population': [20201249], 'NY_murder_rate': [4.3] })
2. 方法一:使用wide_to_long(推荐,适合列名有固定格式的场景)
这个方法专门处理这种"宽表转长表"且列名带分组标识的情况,代码更简洁:
# 转换格式,提取state列 df_result = pd.wide_to_long( df, stubnames=['population', 'murder_rate'], # 指标列的前缀(对应你数据里的统计项) i=df.index, # 行索引(如果有其他唯一标识列可以替换) j='state', # 要生成的新列名 sep='_', # 列名中state和指标的分隔符 suffix='.+', # 匹配state的后缀(任意字符) ).reset_index(drop=True)
3. 方法二:使用melt+拆分+透视(更灵活,适合列名格式不统一的场景)
如果你的列名格式有变动,这种方法适配性更强:
# 第一步:把所有列转成键值对 df_melt = df.melt(var_name='state_metric', value_name='value') # 第二步:拆分state和指标名称 df_melt[['state', 'metric']] = df_melt['state_metric'].str.split('_', expand=True) # 第三步:透视回宽表结构 df_result = df_melt.pivot(index='state', columns='metric', values='value').reset_index() # 清除列名的层级标识 df_result.columns.name = None
两种方法最终得到的结果都符合你的需求:state作为单独一列,其他统计项作为独立列展示。
内容的提问来源于stack exchange,提问作者Ng.Alina
相关产品推荐
相关产品推荐

