2017-06-06 152 views
1

我有两个DataFrames熊猫合并两个DF

DF1有以下形式

ID col1 col2 
0 1  2  10 
1 3  1  21 

和DF2看起来像这样

ID field1 field2 
0 1  4   1 
1 1  3   3 
2 3  5   4 
3 3  9   5 
4 1  2   0 

我想连接两个DataFrames但让我只有每个ID一行,所以它看起来像这样:

ID col1 col2 field1_1 field2_1 field1_2 field2_2 field1_3 field2_3 
0 1 2  10  4   1   3   3   2   0 
1 3 1  21  5   4   9   5 

我试过合并和旋转数据df.pivot(index=df1.index, columns='ID') 但由于长度是可变的,我成为一个ValueError。

ValueError: all arrays must be same length

+0

我会先处理'df2',这样的想法是作为一个独特的键类似'df1'。然后,一旦他们有相同的行数,我会做一个串联。 – quantik

回答

1

没有对格式,我们要合并,并添加计数'ID'个多指数的水平。

df = df1.merge(df2) 
cc = df.groupby('ID').cumcount() 
df.set_index(['ID', 'col1', 'col2', cc]).unstack() 

      field1   field2   
        0 1 2  0 1 2 
ID col1 col2         
1 2 10  4.0 3.0 2.0 1.0 3.0 0.0 
3 1 21  5.0 9.0 NaN 4.0 5.0 NaN 

我们可以明确与格式:

df = df1.merge(df2) 
cc = df.groupby('ID').cumcount() + 1 
d1 = df.set_index(['ID', 'col1', 'col2', cc]).unstack().sort_index(axis=1, level=1) 
d1.columns = d1.columns.to_series().map('{0[0]}_{0[1]}'.format) 
d1.reset_index() 

    ID col1 col2 field1_1 field2_1 field1_2 field2_2 field1_3 field2_3 
0 1  2 10  4.0  1.0  3.0  3.0  2.0  0.0 
1 3  1 21  5.0  4.0  9.0  5.0  NaN  NaN