Pandas合并在索引列上?

时间:2017-08-25 21:13:05

标签: python pandas

<script src="https://maps.googleapis.com/maps/api/js"></script>
<div style="width: 100%; height: 100%;">
  <div id="map" style="width: 50%; height: 100%; float: left;"></div>
  <div id="panel" style="width: 50%; float: right;"></div>
</div>

如果一个 dataframe 中的 index 列与第二个数据框中的另一列具有相同的名称,那么panda无法合并?

3 个答案:

答案 0 :(得分:9)

您需要明确指定如何加入表格。默认情况下,merge会选择公共列名作为合并键。对于你的情况,

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

另请阅读pandas.DataFrame.merge的文档。 希望这会有所帮助。

答案 1 :(得分:2)

join方法默认执行左连接(how='left')并连接数据帧的索引。因此,将orders数据帧的索引设置为CustomerId和然后加入。

# 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'仅将右侧数据框中的项目连接到左侧的所有记录(保留与c长度匹配的等效行数)。 merge的默认行为是内部联接,其结果只包括corders中找到匹配项的记录(尽管这可能是您想要的结果)。

c.merge(orders, left_index=True, right_on='CustomerID', how='left')

答案 2 :(得分:1)

尝试重置索引:

c.reset_index().merge(orders)