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

求Python实现两个DataFrame的迭代组合计算方案

Pandas高效实现DataFrame关联计算方案
  • 核心逻辑:对df1每行的COL1,计算df2中Calc_1 - COL1*Calc_2的聚合结果(求和/计数),写入RESULT列
  • 放弃两层for循环,Pandas提供了更高效的向量化方案,以下是具体实现:

第一步:构造可测试的示例数据

import pandas as pd
import numpy as np

# 示例df1:0-9数值组合表
df1 = pd.DataFrame({
    'COL1': np.arange(10),
    'COL2': np.random.randint(1, 10, size=10),
    'RESULT': np.nan
})

# 示例df2:小时级时间序列表(模拟100条数据)
df2 = pd.DataFrame({
    'Calc_1': np.random.rand(100),
    'Calc_2': np.random.rand(100)
})

第二步:求和操作实现

简洁版(apply方法)

适合中小数据量,代码直观易读:

# 对df1每行的COL1,计算对应聚合和
df1['RESULT'] = df1['COL1'].apply(lambda x: (df2['Calc_1'] - x * df2['Calc_2']).sum())

高效版(广播机制)

针对大数据量优化,完全规避循环,速度提升明显:

# 用numpy广播一次性计算所有行的结果矩阵
result_matrix = df2['Calc_1'].values[:, np.newaxis] - df1['COL1'].values * df2['Calc_2'].values[:, np.newaxis]
# 按列求和(每列对应df1的一行)
df1['RESULT'] = result_matrix.sum(axis=0)

第三步:计数操作实现(以结果>0的条目数为例)

简洁版(apply方法)

df1['RESULT'] = df1['COL1'].apply(lambda x: (df2['Calc_1'] - x * df2['Calc_2'] > 0).sum())

高效版(广播机制)

result_matrix = df2['Calc_1'].values[:, np.newaxis] - df1['COL1'].values * df2['Calc_2'].values[:, np.newaxis]
df1['RESULT'] = (result_matrix > 0).sum(axis=0)
  • 为什么不推荐循环?手动两层for循环效率极低,尤其是df2数据量大时会严重拖慢程序;且容易因索引、赋值逻辑出错,Pandas的向量化方法内部做了性能优化,速度和稳定性都远优于循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:15:06