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

Pandas DataFrame高级查找:无对应8400账户时8409账户level2 NaN修复

解决方案

你可以直接对merge后返回的结果调用fillna()方法,用原始的level2值填充缺失的NaN即可,修改后的代码如下:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame([['USD',7854568400,489],
                    ['USD',9632588400,126],
                    ['USD',3699633691,189],
                    ['USD',9876543697,987],
                    ['EUR',1111118409,987],
                    ['USD',1111118409,987],
                    ['USD',7854568409,396],
                    ['USD',7854567893,897],      
                    ['USD',9632588409,147]],
columns = ['cur','level1','level2'])

# 先备份原始level2值
raw_level2 = df['level2'].copy()

# 执行匹配逻辑后用原始值填充NaN
df['level2'] = df.merge(
    df.assign(level1 = df.level1.astype(str).str.replace('8409$', '8400', regex=True).astype('int64')), 
    on='level1', 
    how='right'
)['level2_x'].fillna(raw_level2)

可选优化

如果你的业务要求同币种的账户才能匹配,需要把merge的关联键加上cur字段,避免不同币种同账户号的错误匹配:

df['level2'] = df.merge(
    df.assign(level1 = df.level1.astype(str).str.replace('8409$', '8400', regex=True).astype('int64')), 
    on=['cur', 'level1'], # 增加币种作为关联条件
    how='right'
)['level2_x'].fillna(raw_level2)

执行后输出结果如下,索引4、5的level2会保留原始的987:

cur      level1  level2
0  USD  7854568400   489.0
1  USD  9632588400   126.0
2  USD  3699633691   189.0
3  USD  9876543697   987.0
4  EUR  1111118409   987.0
5  USD  1111118409   987.0
6  USD  7854568409   489.0
7  USD  7854567893   897.0
8  USD  9632588409   126.0

内容的提问来源于stack exchange,提问作者Alan Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:02