python。

时间:2018-07-22 21:08:21

标签: python pandas numpy

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

1 个答案:

答案 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