如何在熊猫中使用.loc设置为其他列值

时间:2018-11-09 06:49:44

标签: python pandas python-3.6

例如,我有一个数据框:

    cond  value1  value2
0   True       1       1
1  False       3       5
2   True      34       2
3   True      23      23
4  False       4       2

我希望在value2*2时将value1替换为cond=True。所以我想要的结果是:

    cond  value1  value2
0   True       2       1
1  False       3       5
2   True       4       2
3   True      46      23
4  False       4       2

我可以通过以下代码来实现:

 def convert(x):
     if x.cond:
         x.value1= x.value2*2
     return x
 data = data.apply(lambda x: convert(x),axis=1)

我认为数据量很大时速度太慢。我通过.loc尝试过,但是我不知道如何设置值。

如何通过.loc或其他简单方法来实现?预先感谢。

3 个答案:

答案 0 :(得分:4)

您可以使用where / mask

df.value1 = df.value1.mask(df.cond, df.value2*2)
# Or,
# df.value1 = df.value1.where(~df.cond, df.value2*2)

print(df)
    cond  value1  value2
0   True       2       1
1  False       3       5
2   True       4       2
3   True      46      23
4  False       4       2

答案 1 :(得分:3)

创建布尔掩码和多个仅过滤的行:

)

答案 2 :(得分:3)

使用np.where

df['value1'] = np.where(df.cond,df.value2*2,df.value1)

print(df)
    cond  value1  value2
0   True       2       1
1  False       3       5
2   True       4       2
3   True      46      23
4  False       4       2