熊猫合并两个df

时间:2017-06-06 15:49:54

标签: python pandas merge pivot

我有两个DataFrame

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

我想连接两个DataFrame但是每个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

1 个答案:

答案 0 :(得分:1)

如果没有过度格式化,我们希望合并并添加一个计算'ID' s的多索引级别。

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