你可以使用where
:
In [19]: df2.where(df2 != 0, df1)
Out[19]:
age
0 42
1 52
2 1
3 24
4 73
以上,df2 != 0
我是一个布尔型DataFrame。
In [16]: df2 != 0
Out[16]:
age
0 False
1 False
2 True
3 False
4 False
df2.where(df2 != 0, df1)
返回一个新的DataFrame。其中df2 != 0
为真,则使用相应的值df2
。如果是False,则使用相应的值df1
。
另一种方法是,以与df.loc
赋值:
df2.loc[df2['age'] == 0, 'age'] = df1['age']
df.loc[mask, col]
选择的df
其中布尔系列,mask
为True的行,以及其中列标签是col
。
In [17]: df2.loc[df2['age'] == 0, 'age']
Out[17]:
0 0
1 0
3 0
4 0
Name: age, dtype: int64
当在分配使用,例如df2.loc[df2['age'] == 0, 'age'] = df1['age']
, 熊猫执行自动索引标签对齐。 (注意上面的索引标签是0,1,3,4 - 跳过2)。因此df2.loc[df2['age'] == 0, 'age']
中的值将被替换为d1['age']
中的相应值。尽管d1['age']
是索引标签0
,1
,2
,3
和4
的系列,但由于在左侧没有相应的索引标签,所以2
被忽略。
换句话说,
df2.loc[df2['age'] == 0, 'age'] = df1.loc[df2['age'] == 0, 'age']
将工作为好,但在右手侧所添加的限制是不必要的。
谢谢。但是,当我尝试df2.where(df2 ['age']!= 0,df1)我得到AttributeError:'浮动'对象没有属性'全' – ZeusofCode
我认为你遇到[此错误](https:// stackoverflow.com/q/26973803/190597) - 你可以通过升级你的熊猫版本来修复它。 – unutbu
熊猫版本无法更改,因为它安装在服务器上,我只能使用那个:(我的熊猫版本是0.15.1' – ZeusofCode