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

Pandas生成笛卡尔积DataFrame遇KeyError问题求助

问题分析与解决

错误原因

  1. merge参数错误:你写的left_on=['Marketprice', "m2"]里,m2列在df中根本不存在;right_on=['Marketprice', "m2"]里,Marketprice列在df1中也不存在,这就是触发KeyError的直接原因。
  2. 方法用错:你要的是三个数组的笛卡尔积(每个Marketprice值和所有m2、rent值逐一组合),但merge默认是基于共同列做匹配关联,不是生成全组合的工具。

正确解法

解法1:用临时辅助列实现笛卡尔积

给每个DataFrame加一个相同值的临时列,通过这个列做全匹配merge,最后删掉临时列:

import numpy as np
import pandas as pd

marketPrice = np.arange(50000, 300000, 1000)
m2 = np.arange(25, 180, 1)
rent = np.arange(500, 900, 1)

df = pd.DataFrame(data=marketPrice, columns=["Marketprice"])
df1 = pd.DataFrame(data=m2, columns=["m2"])
df2 = pd.DataFrame(data=rent, columns=["rent"])

# 添加临时辅助列
df['tmp'] = 1
df1['tmp'] = 1
df2['tmp'] = 1

# 先合并df和df1,再合并df2
result = df.merge(df1, on='tmp').merge(df2, on='tmp').drop('tmp', axis=1)
print(result)

解法2:用MultiIndex直接生成全组合(更简洁)

利用pd.MultiIndex.from_product直接生成所有值的组合,再转成DataFrame:

import numpy as np
import pandas as pd

marketPrice = np.arange(50000, 300000, 1000)
m2 = np.arange(25, 180, 1)
rent = np.arange(500, 900, 1)

# 生成笛卡尔积索引,转成DataFrame
result = pd.DataFrame(
    index=pd.MultiIndex.from_product([marketPrice, m2, rent], names=['Marketprice', 'm2', 'rent'])
).reset_index()
print(result)

注意:两种方法生成的结果行数为len(marketPrice)*len(m2)*len(rent),计算得250155400=15,500,000行,数据量较大,运行时注意内存占用情况。

内容的提问来源于stack exchange,提问作者Carol.Kar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:35:36