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

pandas按列条件在两个DataFrame间交换行出现NaN的原因及解决方法

错误成因

pandas在执行DataFrame之间的赋值操作时,会默认同时匹配行索引和列名,只有两边索引和列名完全一致的位置才会正常赋值,其他位置会自动填充NaN。
你的测试代码中:

  • df1筛选出的x==1的行,行索引为0
  • df2筛选出的x==323212的行,行索引为1
    两者行索引不匹配,所以赋值后目标行全部为NaN。
实现基于指定列值的行交换操作

可以实现,只要破坏pandas的索引匹配逻辑,或者手动对齐索引即可,最简便的方式是提取右侧赋值对象的底层numpy数组(不带索引信息)进行赋值:

import pandas as pd

df1 = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 5]})
df2 = pd.DataFrame({'x': [3223, 323212, 13242], 'y': [41233, 54, 5532]})

# 先保存df1目标行的临时副本
temp_row = df1[df1["x"] == 1].copy()
# 给df1赋值,用.values取数组跳过索引匹配
df1.loc[df1["x"] == 1, :] = df2.loc[df2["x"] == 323212, :].values
# 给df2赋值完成交换
df2.loc[df2["x"] == 323212, :] = temp_row.values

print(df1)
print(df2)

注意赋值时优先用loc显式指定行和列范围,避免pandas的链式索引警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:06:02