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

如何在Python DataFrame中从OverallRatio列提取数据生成A-F列

从DataFrame的OverallRatio字段拆分生成A-F列的解决方案

需求说明

  • 现有DataFrame包含OverallRatio字段,需生成A、B、C、D、E、F六列
  • 拆分规则:按分号;分割OverallRatio内容,每个分割元素为「数字:数值」格式
  • 映射规则:数字1→A,2→B,3→C,4→D,5→E,6→F,对应数值填入目标列,其余列填0

示例输入输出

输入DataFrame:

OverallRatio
0  1:0.25; 3:0.33; 5:0.5
1   5:0.25; 6: 0.75
2     1:0.5; 6:0.33
3     2:0.25; 4:0.5

输出结果:

OverallRatioABCDEF
1:0.25; 3:0.33; 5:0.50.250.000.330.000.500.00
5:0.25; 6: 0.750.000.000.000.000.250.75
1:0.5; 6:0.330.500.000.000.000.000.33
2:0.25; 4:0.50.000.250.000.500.000.00

实现代码(Pandas)

import pandas as pd

# 构造示例数据(替换为你的真实DataFrame)
df = pd.DataFrame({
    'OverallRatio': [
        '1:0.25; 3:0.33; 5:0.5',
        '5:0.25; 6: 0.75',
        '1:0.5; 6:0.33',
        '2:0.25; 4:0.5'
    ]
})

# 1. 拆分字符串并展开为多行,方便逐个处理键值对
temp = df.assign(ratio=df['OverallRatio'].str.split(';')).explode('ratio')
# 2. 提取数字(列编号)和数值,同时清理前后空格
temp[['col_num', 'value']] = temp['ratio'].str.strip().str.extract(r'(\d+):(\d+\.?\d*)', expand=True)
# 3. 转换数据类型,确保数值为浮点型
temp['col_num'] = temp['col_num'].astype(int)
temp['value'] = temp['value'].astype(float)
# 4. 映射列编号到目标列名
col_mapping = {1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F'}
temp['col_name'] = temp['col_num'].map(col_mapping)
# 5. 透视转换为宽表,空值填充为0
pivot_result = temp.pivot(index=temp.index, columns='col_name', values='value').fillna(0)
# 6. 合并回原DataFrame,调整列顺序
final_df = pd.concat([df, pivot_result], axis=1)
final_df = final_df[['OverallRatio', 'A', 'B', 'C', 'D', 'E', 'F']]

# 查看结果
print(final_df)

代码说明

  • str.split(';').explode():将每个OverallRatio的多个键值对拆分成单独行,便于逐个处理
  • str.extract():用正则表达式提取数字和数值,处理可能存在的空格
  • pivot():将长表转换为宽表,自动匹配列名,空值用0填充
  • 最后合并回原数据,确保保留原始字段并按需求排序列

内容的提问来源于stack exchange,提问作者ram prasad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:00:35