2016-10-17 5 views
5

pandasの2つのデータフレームを共通のカラム名(orderid)にマージしようとしています。結果のデータフレーム(マージされたデータフレーム)は、2番目のデータフレームからオーダーIDを削除しています。 documentationでは、明示的に指示しない限り、 'on'列を保持する必要があります。この出力パンダは 'on'カラムをマージしません

import pandas as pd  
df = pd.DataFrame([[1,'a'], [2, 'b'], [3, 'c']], columns=['orderid', 'ordervalue']) 
df['orderid'] = df['orderid'].astype(str) 
df2 = pd.DataFrame([[1,200], [2, 300], [3, 400], [4,500]], columns=['orderid', 'ordervalue']) 
df2['orderid'] = df2['orderid'].astype(str) 
pd.merge(df, df2, on='orderid', how='outer', copy=True, suffixes=('_left', '_right')) 

:私が作成しようとしています何

|  |orderid | ordervalue_left | ordervalue_right | 
|------|--------|-----------------|------------------| 
| 0 | 1  | a    | 200    | 
| 1 | 2  | b    | 300    | 
| 2 | 3  | c    | 400    | 
| 3 | 4  |     | 500    | 

はこれです:

|  | orderid_left | ordervalue_left | orderid_left | ordervalue_right | 
|------|--------------|-----------------|--------------|------------------| 
| 0 | 1   | a    | 1   | 200    | 
| 1 | 2   | b    | 2   | 300    | 
| 2 | 3   | c    | 3   | 400    | 
| 3 | NaN   | NaN    | 4   | 500    | 

私がこれを書く必要がありますどのように?

答えて

4

dfは、orderid_leftという名前の列があり とdf2orderid_rightという名前の列を持つようにorderid列の名前を変更します。

import pandas as pd  
df = pd.DataFrame([[1,'a'], [2, 'b'], [3, 'c']], columns=['orderid', 'ordervalue']) 
df['orderid'] = df['orderid'].astype(str) 
df2 = pd.DataFrame([[1,200], [2, 300], [3, 400], [4,500]], columns=['orderid', 'ordervalue']) 
df2['orderid'] = df2['orderid'].astype(str) 

df = df.rename(columns={'orderid':'orderid_left'}) 
df2 = df2.rename(columns={'orderid':'orderid_right'}) 
result = pd.merge(df, df2, left_on='orderid_left', right_on='orderid_right', 
        how='outer', suffixes=('_left', '_right')) 
print(result) 

利回り

orderid_left ordervalue_left orderid_right ordervalue_right 
0   1    a    1    200 
1   2    b    2    300 
2   3    c    3    400 
3   NaN    NaN    4    500 
+0

ありがとうございました!信じられないほどパンダがこの醜い回避策を必要とすることを苛立たせる。 – oulenz

関連する問題