我有两个我正在尝试合并的数据框。
array_multiplication
我需要根据列 df1
code scale R1 R2...
0 121 1 80 110
1 121 2 NaN NaN
2 121 3 NaN NaN
3 313 1 60 60
4 313 2 NaN NaN
5 313 3 NaN NaN
...
df2
code scale R1 R2...
0 121 2 30 20
3 313 2 15 10
...
和code
的相等性将值从scale
复制到df2
。
结果应如下所示:
df1
问题是可能会有很多列,例如 df1
code scale R1 R2...
0 121 1 80 110
1 121 2 30 20
2 121 3 NaN NaN
3 313 1 60 60
4 313 2 15 10
5 313 3 NaN NaN
...
和R1
,我无法单独检查每个列,所以我想使用from this instruction,但没有给出任何内容我想要的结果。我做错了什么,但我无法理解。我真的需要建议。
答案 0 :(得分:4)
如果两个数据帧都具有R1 / R2的值,您希望发生什么?如果你想保持df1,你可以做
df1.set_index(['code', 'scale']).fillna(df2.set_index(['code', 'scale'])).reset_index()
保持df2只是反过来做补充。要以其他方式结合,请澄清问题!
答案 1 :(得分:3)
试试这个?
gem 'simple_form', '~> 4.0.0'
答案 2 :(得分:3)
combine_first
这是一个很好的情况。它从传递的数据帧中替换调用数据帧中的空值。
df1.set_index(['code', 'scale']).combine_first(df2.set_index(['code', 'scale'])).reset_index()
code scale R1 R2
0 121 1 80.0 110.0
1 121 2 30.0 20.0
2 121 3 NaN NaN
3 313 1 60.0 60.0
4 313 2 15.0 10.0
5 313 3 NaN NaN
其他解决方案
with fillna
df.set_index(['code', 'scale']).fillna(df1.set_index(['code', 'scale'])).reset_index()
with add
- 加快一点
df.set_index(['code', 'scale']).add(df1.set_index(['code', 'scale']), fill_value=0)