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
So panda can't merge if index column in one dataframe has the same name as another column in a second dataframe?
You need to explicitly specify how to join the table. By default, merge will choose common column name as merge key. For your case,
c.merge(orders, left_index=True, right_on='CustomID')
Also, read the docs of pandas.DataFrame.merge please.
Hope this would be helpful.
The join method does a left join by default (how='left') and joins on the indices of the dataframes. So set the index of the orders dataframe to CustomerId and then join.
# 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
Alternatively, this merge will give you the same result. Here, you are joining on the index of c (the left dataframe) and on the CustomerID column in the right dataframe. Ensure to specify how='left' to only join items from the right dataframe to all of the records on the left (leaving an equivalent number of rows matching the length of c). The default behavior for merge is an inner join, wherebe the result only includes those records from c that find a match in orders (although this could be your desired result).
c.merge(orders, left_index=True, right_on='CustomerID', how='left')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With