我有两个长度不同的数据框,我想根据特定列中的公共值将它们连接在一起。如果股票行情栏匹配,我希望对数字栏求和。例如,我想要一个新列,并将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
答案 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)