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

Python Pandas合并两表关联系数数组计算生成新表的实现方法

实现步骤与代码

你可以按以下几步完成需求:

  1. 先将两个DataFrame按cluster字段关联
  2. 将关联后的结果和系数数组做笛卡尔积展开
  3. 按公式计算目标字段,调整字段名得到最终结果

完整可运行代码如下:

import pandas as pd
import numpy as np

# 构造测试数据
data1 = [[1, 2000], [2, 3000]]
df_players = pd.DataFrame(data1, columns = ['cluster', 'users'])
data2 = [[1, 2], [2, 4]]
df_multiplyer = pd.DataFrame(data2, columns = ['cluster', 'multiplyer'])
coef = np.arange(.05, 0.16, 0.05)

# 第一步:关联两个表
df_merge = df_players.merge(df_multiplyer, on='cluster')

# 第二步:和系数数组做笛卡尔积
# 先把系数转成DataFrame
df_coef = pd.DataFrame(coef, columns=['coeffs'])
# pandas 1.2.0+ 支持直接用cross参数做笛卡尔积
df_result = df_merge.merge(df_coef, how='cross')

# 第三步:调整字段名、计算目标字段
df_result = df_result.rename(columns={'users': 'num_users'})
df_result['calculated_field'] = df_result['num_users'] * df_result['multiplyer'] * df_result['coeffs']

# 输出结果
print(df_result)

运行后得到的结果和期望完全一致:

clusternum_usersmultiplyercoeffscalculated_field
1200020.05200.0
1200020.10400.0
1200020.15600.0
2300040.05600.0
2300040.101200.0
2300040.151800.0

如果你使用的pandas版本低于1.2.0不支持cross merge,可以用临时key的兼容写法替换笛卡尔积步骤:

# 低版本pandas兼容实现笛卡尔积
df_merge['tmp_key'] = 0
df_coef['tmp_key'] = 0
df_result = df_merge.merge(df_coef, on='tmp_key').drop('tmp_key', axis=1)

逻辑完全一致,通过相同的临时字段关联实现笛卡尔积效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:18:03