根据条件添加两个具有不同大小的df列

时间:2020-06-03 11:43:19

标签: python pandas

我有两个尺寸不同的df。我必须在df1和df2中添加具有匹配的account_num的loan_amnt列,如果在df2中没有匹配的account_num,则将其传递并粘贴df1中的值。最后从结果中减去df3。

第一个df1:

account_num loan_amnt   
124    1359467
125    2537290
126    9152838
127    7738935
129    4446699
130    1176879
131    2629022
132    7497333
143    4992738
144    3483429
148    1027315
149    3529133
150    3481139

第二个df2:

account_num loan_amnt
124    6334892
125    4384097
126    1110000
127    4110000
129    3344000
131    1171246
132    4326000
143    1100310
149    2843147

第三df3

account_num loan_amnt
124    1360100
125    2119064
126    8600635
127    7749935
129    4767909
130    9088889
131    2631015
132    1003917
143    5413355
144    3446656
148    1027315
149    3749521
150    3266721

公式为:result_df =(df + df2)-df3

我尝试了各种方法,但是没有得到预期的结果。

2 个答案:

答案 0 :(得分:2)

如果account_num是每个DataFrame的索引,则将DataFrame.addDataFrame.subfill_value=0参数一起使用:

result_df = df.add(df2, fill_value=0).sub(df3, fill_value=0)

如果列account_num首先创建索引:

result_df = (df.set_index('account_num')
               .add(df2.set_index('account_num'), fill_value=0)
               .sub(df3.set_index('account_num'), fill_value=0)
               .reset_index())

答案 1 :(得分:1)

我认为jezreal的答案看起来更好,但这可能更容易理解:

import pandas as pd


df1 = pd.DataFrame({'acc': [1, 2, 3, 4], 'loan': [10, 12, 14, 16]})
df2 = pd.DataFrame({'acc': [1, 3, 4], 'loan': [10, 14, 16]})
df3 = pd.DataFrame({'acc': [1, 2, 3, 4], 'loan': [5, 4, 3, 2]})

df1.set_index('acc', inplace=True)
df2.set_index('acc', inplace=True)
df3.set_index('acc', inplace=True)

result_df = df1.copy()
result_df.loc[df2.index] += df2
result_df -= df3