我正在解决一个模拟问题,其中需要快速启动一些数据。这是问题:假设我们有2个数据集X和Y,并且我们需要一个新的数据集Z,其中每行来自X用于填充Y的新列,对于X的每一行重复此过程,然后合并在一起,即最终数据集Z的大小为len(x)*len(y)。创建数据集Z的最有效方法是什么?以下是我目前的进展:
X = pd.DataFrame({'simulationid':[0,1,2,3],'x1':[10,20,30,40],'x2':[1,2,3,4]})
Y = pd.DataFrame({'timeofday':[5,10,15,20],'var1':[23.5,45.0,46.4,60.3]})
最简单的选择(可能不是最有效的)是迭代每一行并填充一个新的数据框:
# loop over every configuration and generate dataset for each,
# then merge at the end
Z = pd.DataFrame()
cols2merge = ['x1','x2']
for index, row in X.iterrows():
for c in cols2merge:
Y[c]=row[c]
Z = pd.concat([Z,Y])
但是,当X的大小增加时(从1000到10000),这最终需要很长时间。有没有更聪明的方法来利用向量运算或其他Pandas特定的优化?我想有一种优雅的一行合并/连接/联接的解决方案,但我似乎无法想出来。
我还尝试了使用itertuples而不是iterrows,如此处建议:https://github.com/pandas-dev/pandas/issues/10334,但执行时间没有显著改善。
提前致谢!