Pandas DataFrame:如何在索引和列的组合上与第二个DataFrame左合并

时间:2018-10-03 16:03:11

标签: python pandas dataframe

我正在尝试合并两个数据框。

我想合并一列,即第二个DataFrame的索引, 一列,即第二个数据框中的。两个数据框中的列/索引名称都不同。

示例:

import pandas as pd

df2 = pd.DataFrame([(i,'ABCDEFGHJKL'[j], i*2 + j) 
                    for i in range(10) 
                    for j in range(10)],
                    columns = ['Index','Sub','Value']).set_index('Index')

df1 = pd.DataFrame([['SOMEKEY-A',0,'A','MORE'],
                    ['SOMEKEY-B',4,'C','MORE'],
                    ['SOMEKEY-C',7,'A','MORE'],
                    ['SOMEKEY-D',5,'Z','MORE']
                   ], columns=['key', 'Ext. Index', 'Ext. Sub', 'Description']
                  ).set_index('key')

df1打印出

key Ext. Index  Ext. Sub    Description
SOMEKEY-A   0   A   MORE
SOMEKEY-B   4   C   MORE
SOMEKEY-C   7   A   MORE
SOMEKEY-D   5   Z   MORE

df2的第一行是

Index   Sub Value
0   A   0
0   B   1
0   C   2
0   D   3
0   E   4

我想将“ Ext。Index”和“ Ext。Sub”与DataFrame df2合并,其中索引为“ Index”,列为“ Sub”

预期结果为:

key Ext. Index  Ext. Sub    Description Ext. Value
SOMEKEY-A   0   A   MORE    0
SOMEKEY-B   4   C   MORE    10
SOMEKEY-C   7   A   MORE    14
SOMEKEY-D   5   Z   MORE    None

手动,合并是这样的

def get_value(x):
    try:
        return df2[(df2.Sub == x['Ext. Sub']) & 
                   (df2.index == x['Ext. Index'])]['Value'].iloc[0]
    except IndexError:
        return None

df1['Ext. Value'] = df1.apply(get_value, axis = 1)

我可以使用pd.mergepd.concat命令来执行此操作吗? 通过将df2.index变成一列来更改df2?

1 个答案:

答案 0 :(得分:2)

尝试使用:

.option("quote", "\u0000")