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

如何匹配DataFrame中rf列值与列名并生成对应rl列?

解决方案

核心思路

不用手动遍历每行,利用Pandas的逐行操作自动适配任意数量的rf_*列,生成对应的rl_*列;对于缺失的rf_*列,对应的rl_*列直接设为null。

代码实现

先构造示例DataFrame:

import pandas as pd

data = {
    'driver_age': [25, 40],
    'vehicle_age': [17, 10],
    'usage': ['business', 'private'],
    'sum_insured': [3290, 7000],
    'rf_1': ['driver_age', 'vehicle_age'],
    'rf_2': ['vehicle_age', 'driver_age'],
    'rf_3': ['usage', 'usage']
}
df = pd.DataFrame(data)

执行处理逻辑:

# 筛选所有rf列并提取编号
rf_cols = df.filter(like='rf_').columns
if not rf_cols.empty:
    rf_nums = [int(col.split('_')[1]) for col in rf_cols]
    max_rf_num = max(rf_nums)
    
    # 生成所有对应rl列
    for num in range(1, max_rf_num + 1):
        rf_col = f'rf_{num}'
        rl_col = f'rl_{num}'
        
        if rf_col in df.columns:
            # 逐行根据rf列的列名取值,无效列名返回null
            df[rl_col] = df.apply(lambda row: row.get(row[rf_col], pd.NA), axis=1)
        else:
            # 缺失的rf列对应rl列设为null
            df[rl_col] = pd.NA

效果验证

执行后得到的DataFrame与期望输出完全一致:

driver_agevehicle_ageusagesum_insuredrf_1rf_2rf_3rl_1rl_2rl_3
2517business3290driver_agevehicle_ageusage2517business
4010private7000vehicle_agedriver_ageusage1040private

额外说明

  • 若rf_*列中存在DataFrame没有的无效列名,对应的rl_*值会自动设为pd.NA;
  • 无论rf_*列是2个、5个还是其他数量,代码都能自动适配,缺失编号的rl_*列自动填充null。

内容的提问来源于stack exchange,提问作者555codewiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:48:24