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

如何基于条件替换DataFrame中的数据并适配列顺序不一致的场景

问题描述

我有两个Pandas DataFrame:df1和df2,构造代码及数据如下:

import pandas as pd

df1 = pd.DataFrame()
df1['Cat'] = [0,1,2]
df1['Mouse'] = [12,13,17]
df1['Dog'] = [18,22,89]

df1的数据长这样:

Cat  Mouse  Dog
0    0     12   18
1    1     13   22
2    2     17   89
df2 = pd.DataFrame()
df2['Cat'] = [0.94, 0.86, 0.04]
df2['Mouse'] = [1,0.12,0.13]
df2['Dog'] = [0.03,0.025,0.17]

df2的数据是这样:

Cat  Mouse    Dog
0  0.94   1.00  0.030
1  0.86   0.12  0.025
2  0.04   0.13  0.170

我的需求是:只有当df2对应位置的值小于0.05时,把df1对应位置的值替换成NaN,期望得到的结果如下:

Cat  Mouse   Dog
0  0.0     12   NaN
1  1.0     13   NaN
2  NaN     17  89.0

补充问题:如果df1和df2的列顺序不一样(比如df1是Cat、Dog、Mouse,df2是Dog、Mouse、Cat),代码该怎么改?

解决方案

场景1:df1和df2列顺序完全一致

这种情况最省心,直接用Pandas的布尔索引就能完成替换,代码超简洁:

# 先复制df1,避免修改原始数据
result_df = df1.copy()
# 用布尔矩阵标记需要替换的位置,直接赋值为NaN
result_df[df2 < 0.05] = pd.NA

运行后result_df就是你想要的结果。原理很简单:Pandas会自动对齐两个DataFrame相同位置的元素,df2 < 0.05会生成一个和原DataFrame形状一样的布尔矩阵,True的位置就是需要替换成NaN的地方,直接赋值就行。(用np.nan也可以,在数值列里效果和pd.NA一致)

场景2:df1和df2列顺序不一致

列顺序不同的话,关键是先让两个DataFrame的列对齐,再执行替换。我们可以用reindex()方法把df2的列调整成和df1一模一样的顺序,之后就和场景1的操作一样了:

# 模拟列顺序不一致的情况
df1 = df1[['Cat', 'Dog', 'Mouse']]
df2 = df2[['Dog', 'Mouse', 'Cat']]

# 复制原始df1
result_df = df1.copy()
# 将df2的列重新对齐为df1的列顺序
aligned_df2 = df2.reindex(columns=df1.columns)
# 执行替换操作
result_df[aligned_df2 < 0.05] = pd.NA

这样不管两个DataFrame的列怎么打乱,都能保证对应列的元素正确匹配,完美完成替换需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 02:47:39