使用循环填充DataFrame NaN值:从另一列拆分片段提取匹配值
实现方案
第一步:导入依赖
import pandas as pd import numpy as np
第二步:定义目标值与填充逻辑
# 定义需要匹配的目标值列表 target_values = ['123', '456', '789'] # 自定义填充函数 def get_col2_value(col1_str): # 按下划线拆分Col1字符串 split_parts = col1_str.split('_') # 遍历所有拆分片段 for part in split_parts: # 检查片段是否包含任意目标值 for target in target_values: if target in part: return part # 无匹配片段返回指定值 return 'Not Found'
第三步:应用逻辑填充Col2空值
# 构造示例DataFrame(可替换为自己的数据源) df = pd.DataFrame({ 'Col1': ['AAA_BBB_PORT123_DD', 'AAA_123_BBB_DD', 'STD123_AAA_BBB_DD', '123_AAA_BB_DDD', '456_AAA_BBB_DD', 'AAA_BBB_456_DD', 'AAA_MAN789_BBB_DD', 'AAA_BBB_789_DD', 'AAA_000_BBB_DD'], 'Col2': ['PORT123', '123', 'STD123', np.nan, '456', '456', np.nan, '789', np.nan] }) # 仅填充Col2的空值,原有非空值保留 df['Col2'] = df['Col2'].fillna(df['Col1'].apply(get_col2_value))
输出结果验证
运行上述代码后得到的df和预期输出完全一致:
| Col1 | Col2 | |
|---|---|---|
| 0 | AAA_BBB_PORT123_DD | PORT123 |
| 1 | AAA_123_BBB_DD | 123 |
| 2 | STD123_AAA_BBB_DD | STD123 |
| 3 | 123_AAA_BB_DDD | 123 |
| 4 | 456_AAA_BBB_DD | 456 |
| 5 | AAA_BBB_456_DD | 456 |
| 6 | AAA_MAN789_BBB_DD | MAN789 |
| 7 | AAA_BBB_789_DD | 789 |
| 8 | AAA_000_BBB_DD | Not Found |
内容的提问来源于stack exchange,提问作者user14073111
相关产品推荐
相关产品推荐

