从pandas中的数据框组合列的问题

时间:2017-09-13 14:32:46

标签: python pandas

我有两个我正在尝试合并的数据框。

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,但没有给出任何内容我想要的结果。我做错了什么,但我无法理解。我真的需要建议。

3 个答案:

答案 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)