2017-03-08 127 views
0

如何根据整个数据框的条件而不是列替换单元格的数据框中的值。我曾尝试使用df.where但按照计划基于条件熊猫替换值

df = df.where(operator.and_(df > (-1 * .2), df < 0),0) 
df = df.where(df > 0 , df * 1.2) 

基本上什么林试图在这里做的是更换-.2和0之间的所有值为零所有列在我的数据帧,所有这不起作用值大于零,我想1.2

回答

0

你误解的方式pandas.where作品,这使原来的对象的值,如果条件为真繁殖,否则更换,你可以尝试扭转你的逻辑:

df = df.where((df <= (-1 * .2)) | (df >= 0), 0) 
df = df.where(df <= 0 , df * 1.2) 
+0

您应该拥有&运算符而不是|。正如所写的,所有内容都将更改为0.我尝试编辑,但不会允许我仅更改|至 &。 – tnknepp

0

其中允许你t o有一个单线解决方案,这非常棒。我更喜欢用这样的面具。

idx = (df < 0) & (df >= -0.2) 
df[idx] = 0 

我更喜欢把它分成两行,因为使用这种方法更容易阅读。你也可以强制这一行。

df[(df < 0) & (df >= -0.2)] = 0 

只是另一种选择。