import numpy as np
import pandas as pd
dat1 = pd.DataFrame({
'Var1' : [1,2],
'Var2' : [3,3]
})
dat2 = pd.DataFrame({
'Var1' : [4,4],
'Var2' : [5,6]
})
我希望R中类似的expand.grid.df功能可以在python中合并这两个数据帧。请注意,在我的实际情况下,我有更多列。
expand.grid.df <-function(...)Reduce(function(...)merge(...,by = NULL),list(...))
所以,如果我给一个函数说expand_grid_df(dat1,dat2) 结果应该是这样的。
Var1_x Var1_y Var2_x Var2_y
1 4 3 5
2 4 3 5
1 4 3 6
2 4 3 6
所以就像np.meshgrid在数据帧上工作一样。 该功能应该可以在数据框中的任意数量的列上使用。
编辑: 我能够在下面看到它的工作原理,但是还有一种更优雅,更高效的方式吗?
def myexpand_grid(x, y):
xG, yG = np.meshgrid(x, y) # create the actual grid
xG = xG.flatten() # make the grid 1d
yG = yG.flatten() # same
return ( xG, yG)
df2 = pd.DataFrame()
for i in range(len(dat1.columns)):
name = dat1.columns[i]
x, y = myexpand_grid(dat1[name],dat2[name])
df2[name + '_x'] = x
df2[name + '_y'] = y
答案 0 :(得分:0)
IIUC,
n = dat1.add_suffix('_x').join(dat2.add_suffix('_y'))
Var1_x Var2_x Var1_y Var2_y
0 1 3 4 5
1 2 3 4 6
当然,可以随时对列进行排序
n.reindex(sorted(n.columns), axis=1)
Var1_x Var1_y Var2_x Var2_y
0 1 4 3 5
1 2 4 3 6