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

如何按位置对两个不同DataFrame的对应元素执行除法运算

问题原因

你运行结果全为NaN的核心原因是:pandas的DataFrame算术运算会自动按列名、行索引对齐,你的df1数值列列名为Set1/Set2/Set3,df2数值列列名为AK/BD/CL,列名完全不匹配,对齐后所有位置都找不到对应值,因此结果全为NaN。

解决方法

如果确认两个DataFrame的行顺序、数值列的顺序完全对应,可参考以下两种实现方案:

方案1:直接调用numpy数组按位置运算

import pandas as pd

# df1、df2定义代码保持不变
df1 = pd.DataFrame({'Name': ["cat", "dog", "fish"],
    'Set1': [20, 10, 0],
    'Set2': [15, 0, 12],
    'Set3': [0, 0, 6]})
df2 = pd.DataFrame({'Name': ["cat", "dog", "fish"],
    'AK': [2, 2, 0],
    'BD': [5, 1, 3],
    'CL': [1, 0, 6]})

df1.set_index('Name', inplace=True)
df2.set_index('Name', inplace=True)

# 取底层numpy数组按位置做除法,再还原DataFrame结构
df3 = pd.DataFrame(df1.values / df2.values, index=df1.index, columns=df1.columns)
# 处理0/0得到的空值,转换为整数格式
df3 = df3.fillna(0).astype(int).reset_index()

方案2:对齐列名后做除法

df1.set_index('Name', inplace=True)
df2.set_index('Name', inplace=True)

# 将df2的列名临时替换为和df1一致,再做运算
df2_tmp = df2.set_axis(df1.columns, axis=1)
df3 = (df1 / df2_tmp).fillna(0).astype(int).reset_index()

两种方案输出的df3都和预期结果一致:

Name  Set1  Set2  Set3
0   cat    10     3     0
1   dog     5     0     0
2  fish     0     4     1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:48:03