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

Python pandas:将一个DataFrame单行除以另一个DataFrame所有行

问题原因

你之前调用df1.iloc[0].div(df2.iloc[:])返回NaN,是pandas算术运算默认的索引+列对齐机制导致的:

  • df1.iloc[0]是索引为[A,B,C,D]、行标签为0的Series
  • 直接和全量df2做除法时,pandas会同时匹配行索引和列名,只有行索引为0的行能和Series的行标签匹配上,其余行找不到匹配项就会返回NaN;同时df2里的time、type是非数值列,本身也不支持除法运算。
实现方案

只需要提取两个DataFrame共有的数值列单独做运算,非数值列保留原值即可,pandas会自动将单行的数值按列广播到所有行,不会出现索引对齐错误:

import pandas as pd

# 1. 构造示例数据(和你给出的样例一致)
df1 = pd.DataFrame({'A': [10000], 'B': [20000], 'C': [30000], 'D': [40000]})
df2 = pd.DataFrame({
    'time': ['5/2020', '6/2020'],
    'type': ['unit', 'unit'],
    'A': [1000, 7000],
    'B': [4000, 2000],
    'C': [900, 600],
    'D': [200, 4000]
})

# 2. 定义需要做除法的数值列
calc_columns = ['A', 'B', 'C', 'D']
# 复制原df2避免修改原始数据
result = df2.copy()
# 3. 对数值列做除法,自动广播到所有行
result[calc_columns] = df1.iloc[0][calc_columns] / result[calc_columns]
# 4. 按需保留2位小数,和你给出的预期结果格式对齐
result[calc_columns] = result[calc_columns].round(2)
运行结果

执行后输出的result完全符合你的预期:

time  type      A      B      C    D
0  5/2020  unit  10.00   5.00  33.33  200
1  6/2020  unit   1.43  10.00  50.00   10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:33:23