如何用pandas apply函数将错移至B、C列的数值移回A列
数据错移值归位实现方案
错移值识别规则
结合示例数据集的取值特征,可精准匹配错移判定标准:
- A列正常取值为100-700区间的百位数级数值
- B、C列正常取值为个位数级(8-15区间)
- 所有出现在B、C列内、值超过100的单元格,均为从A列错移而来的异常值,这类值的核心特征是显著大于所在列的常规取值范围
可直接运行的实现代码
import pandas as pd import numpy as np # 复现原始示例数据集 data = {'A': [100,200,np.nan,400,np.nan ,600,np.nan , np.nan], 'B': [8, 9,np.nan , 11, 500, 13, 700, 15 ], 'C': [np.nan,np.nan,300, np.nan, 12,np.nan , 14, np.nan]} df = pd.DataFrame(data, index=pd.date_range("2021-02-01", periods=8, freq="24H")) # 定义错移判定阈值:B/C列正常最大取值远低于100,超过该值即为错移的A列数值 abnormal_threshold = 100 # 定位所有存在错移值的行和对应数值 shifted_rows = df.loc[df[['B', 'C']].gt(abnormal_threshold).any(axis=1), ['B', 'C']] # 逐行执行数值归位 for row_idx, row_data in shifted_rows.iterrows(): # 提取当前行的错移数值和原所在列 abnormal_cells = row_data[row_data > abnormal_threshold] shifted_val = abnormal_cells.iloc[0] original_col = abnormal_cells.index[0] # 将错移值赋值给对应行的A列 df.loc[row_idx, 'A'] = shifted_val # 清空原位置的错误偏移值 df.loc[row_idx, original_col] = np.nan
修正效果验证
执行完上述代码后,输出修正后的数据集:
A B C 2021-02-01 100.0 8.0 NaN 2021-02-02 200.0 9.0 NaN 2021-02-03 300.0 NaN NaN 2021-02-04 400.0 11.0 NaN 2021-02-05 500.0 NaN 12.0 2021-02-06 600.0 13.0 NaN 2021-02-07 700.0 NaN 14.0 2021-02-08 NaN 15.0 NaN
全量数据集适配调整说明
- 针对实际50列的数据集,可将代码中
['B', 'C']替换为除目标列A外的所有列名列表,扩大错移值的检测范围 - 错移判定阈值可根据实际业务的列取值范围灵活调整,例如某列正常取值最大为60,即可将阈值设为70,适配不同量级的错移场景
- 可增加前置判断逻辑:仅当目标行的A列当前为空值时才执行归位赋值,避免覆盖原有的正确A列数值
内容的提问来源于stack exchange,提问作者sambehera
相关产品推荐
相关产品推荐

