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)Result应该是这样的。
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处理数据帧一样。该函数应该适用于dataframe中的任意数量的列。
编辑:我能够完成它看到下面,但有一个更优雅和高性能的方式?
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
发布于 2018-09-26 09:36:27
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
https://stackoverflow.com/questions/-100002733
复制相似问题