例如,我有一个数据框:
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
或其他简单方法来实现?预先感谢。
答案 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