Pandas DataFrame:如何在索引和列的组合上向左与第二个 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)

我可以使用 apd.merge或pd.concat命令执行此操作,而无需通过将 df2.index 转换为列来更改 df2 吗?


HUWWW
浏览 188回答 1
1回答

RISEBY

尝试使用:df_new = (df1.merge(df2[['Sub', 'Value']],                    how='left',                    left_on=['Ext. Index', 'Ext. Sub'],                    right_on=[df2.index, 'Sub'])          .set_index(df1.index)          .drop('Sub', axis=1))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python