Python从多个数据框架创建组合

时间:2015-12-01 07:06:45

标签: python pandas

基本上,我想通过创建所有可能的列组合,从一些现有数据框创建一个新数据框。这在SAS(或expand.grid中的R函数)中非常简单:

create table combine_var as
select *
from var_1, avar_2;

但我不确定,Python中的平等方式是什么。例如,我的数据框如下所示:

var_1= pd.DataFrame.from_items([('val_1', [0.00789, 0.01448, 0.03157])])
var_2= pd.DataFrame.from_items([('val_2', [0.5, 1.0])])

我希望输出结果为:

val_1   val_2
0.00789 0.5
0.00789 1.0
0.01448 0.5
0.01448 1.0
0.03157 0.5
0.03157 1.0

1 个答案:

答案 0 :(得分:4)

您可以使用docs cookbook中提到的expand_grid

def expand_grid(data_dict):
  rows = itertools.product(*data_dict.values())
  return pd.DataFrame.from_records(rows, columns=data_dict.keys())

expand_grid({'val_1': [0.00789, 0.01448, 0.03157], 'val_2' : [0.5, 1.0]})

In [107]: expand_grid({'val_1': [0.00789, 0.01448, 0.03157], 'val_2' : [0.5, 1.0]})
Out[107]:
     val_1  val_2
0  0.00789    0.5
1  0.00789    1.0
2  0.01448    0.5
3  0.01448    1.0
4  0.03157    0.5
5  0.03157    1.0

修改

对于现有数据框,您首先需要从数据框中创建一个字典。您可以与question的答案之一合并为一个。案例:

expand_grid(dict(var_1.to_dict('list'), **var_2.to_dict('list')))

In [122]: expand_grid(dict(var_1.to_dict('list'), **var_2.to_dict('list')))
Out[122]:
     val_1  val_2
0  0.00789    0.5
1  0.00789    1.0
2  0.01448    0.5
3  0.01448    1.0
4  0.03157    0.5
5  0.03157    1.0