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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:10:34