2017-06-06 242 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