如何匹配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_age | vehicle_age | usage | sum_insured | rf_1 | rf_2 | rf_3 | rl_1 | rl_2 | rl_3 |
|---|---|---|---|---|---|---|---|---|---|
| 25 | 17 | business | 3290 | driver_age | vehicle_age | usage | 25 | 17 | business |
| 40 | 10 | private | 7000 | vehicle_age | driver_age | usage | 10 | 40 | private |
额外说明
- 若
rf_*列中存在DataFrame没有的无效列名,对应的rl_*值会自动设为pd.NA; - 无论
rf_*列是2个、5个还是其他数量,代码都能自动适配,缺失编号的rl_*列自动填充null。
内容的提问来源于stack exchange,提问作者555codewiz
相关产品推荐
相关产品推荐

