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

如何在不转换为数组/序列时对列名不同的DataFrame逐元素相除?

解决行数相同、列名不同的DataFrame逐元素相除问题

你的问题出在df1.div(df2, axis='columns')会按列名进行对齐匹配,但两个DataFrame的列名完全不同,导致无法找到匹配的列,最终生成的结果里全是NA;如果你的实际数据存在索引重复的情况,还会出现行数膨胀的问题。

以下是无需转换为np.array或Series的解决办法:

方法1:临时重命名df2的列名与df1一致后相除

通过set_axis方法修改df2的列名(不改动原df2),让两个DataFrame的列名匹配,之后直接使用除法运算:

import pandas as pd

df1 = pd.DataFrame({'A':[4,2,1],'B':[10,4,2]})
df2 = pd.DataFrame({'C':[8,4,1],'D':[20,2,4]})

# 临时修改df2列名并执行除法
df3 = df1.div(df2.set_axis(df1.columns, axis=1))

执行后df3的结果就是你期望的:

A    B
0  0.5  0.5
1  0.5  2.0
2  1.0  0.5

方法2:直接修改df2列名(若无需保留原df2列名)

如果不需要保留df2原来的列名,可以直接修改其列名后相除:

df2.columns = df1.columns
df3 = df1 / df2

这两种方法都是基于DataFrame本身的操作,完全不需要转换为数组或Series,且能保证逐元素按位置对应相除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:51:48