我有两个尺寸不同的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
我尝试了各种方法,但是没有得到预期的结果。
答案 0 :(得分:2)
如果account_num
是每个DataFrame的索引,则将DataFrame.add
和DataFrame.sub
与fill_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