如何合并基于同一列的两个不同行长的数据框

时间:2019-05-20 15:26:48

标签: python dataframe merge

我有两个长度不同的数据框,我想根据特定列中的公共值将它们连接在一起。如果股票行情栏匹配,我希望对数字栏求和。例如,我想要一个新列,并将EMBR3 BZ的值设置为2967205158(2967200592 + 4566),同时将代号ASURB MM的行保留为3356205474,因为它在df2中不存在。

要添加到此,我在两个数据框中的number列之后也有列,下面没有显示,因为列太多了,我不想在最终输出中丢失它们。如果我使用pd.merge我会在df1中的Number之后丢失列。我真的为此感到挣扎,如果有人可以帮助我,我将不胜感激!

df1 

Ticker        Number
EMBR3 BZ    2967200592
LREN3 BZ    7655250160
ASURB MM    3356205474
ISA         2095646662
DFD         6765767657
L65N3 BZ    765545664

df2

Ticker        Number
EMBR3 BZ    4566
LREN3 BZ    3776
ISA         46575

output 

Ticker        Number            New Number
EMBR3 BZ    2967200592         2967205158
LREN3 BZ    7655250160         7655253936
ASURB MM    3356205474         3356205474
ISA         2095646662         2095693237
DFD         6765767657         6765767657           
L65N3 BZ    765545664          765545664


2 个答案:

答案 0 :(得分:0)

使用fill_value

df1['New Number'] = df1.add(df2, axis='columns', fill_value=0)

答案 1 :(得分:0)

join保留数据帧的原始索引。这样就可以使用正确的索引构建一个简单的Series,并直接在原始数据框中使用它。

在这里,新系列将包含df2.Number的值,其他行的值为0,并强制转换为int:

df1.join(df2.set_index('Ticker'),on='Ticker', lsuffix='_').Number.fillna(0).astype(int)

然后我们可以使用它向第一个数据框添加新列:

df1['New Number'] = df1['Number'] + df1.join(df2.set_index('Ticker'),on='Ticker',
                                             lsuffix='_').Number.fillna(0).astype(int)