2017-08-25 2 views
2
In [88]: c 
Out[88]: 
         Address Name 
CustomerID        
10   Address for Mike Mike 
11   Address for Marcia Marcia 

In [89]: c.index 
Out[89]: Int64Index([10, 11], dtype='int64', name='CustomerID') 

In [90]: orders 
Out[90]: 
    CustomerID OrderDate 
0   10 2014-12-01 
1   11 2014-12-01 
2   10 2014-12-01 

In [91]: orders.index 
Out[91]: RangeIndex(start=0, stop=3, step=1) 

In [92]: c.merge(orders) 
--------------------------- 
MergeError: No common columns to perform merge on 

だから、パンダは、第二のデータフレーム内の別の列と同じ名前を持つ 1つのデータフレームにかの指標列をマージすることはできませんか?パンダはインデックス列にマージしますか?

答えて

7

は、明示的にテーブルを結合する方法を指定する必要があります。デフォルトでは、mergeは、マージキーとして共通の列名を選択します。あなたの場合、

c.merge(orders, left_index=True, right_on='CustomID') 

また、pandas.DataFrame.mergeのドキュメントをご覧ください。 これが役に立つと願っています。

+0

thx、私は様々な書籍を今読んでいます。多くの情報:)感謝しています。Rojeer! – DmitrySemenov

1

は、インデックスをリセットしてください:

c.reset_index().merge(orders) 
2

join方法は、左がデフォルト(how='left')で参加し、そうCustomerIdordersデータフレームのインデックスを設定し、参加します。データフレームのインデックスに参加しない。

# Create sample data. 
orders = pd.DataFrame(
    {'CustomerID': [10, 11, 10], 
    'OrderDate': ['2014-12-01', '2014-12-01', '2014-12-01']})  
c = pd.DataFrame(
    {'Address': ['Address for Mike', 'Address for Marcia'], 
    'Name': ['Mike', 'Marcia']}, 
    index=pd.Index([10, 11], dtype='int64', name='CustomerID')) 

# Join. 
>>> c.join(orders.set_index('CustomerID')) 
         Address Name OrderDate 
CustomerID           
10   Address for Mike Mike 2014-12-01 
10   Address for Mike Mike 2014-12-01 
11   Address for Marcia Marcia 2014-12-01 

また、このmerge意志を同じ結果を返します。c(左側のデータフレーム)のインデックスと右側のデータフレームのCustomerIDの列に参加しています。how='left'を指定して、正しいデータフレームのアイテムと左(lと同じ数の行を残すength of c)。 mergeのデフォルトの動作は内部結合です。ordersという一致が見つかったcのレコードのみが結果に含まれます(ただし、これが望ましい結果になる可能性があります)。

c.merge(orders, left_index=True, right_on='CustomerID', how='left') 
関連する問題