基于条件pandas替换值

时间:2017-03-08 16:49:33

标签: python pandas

如何根据整个数据框的条件而不仅仅是列替换单元格的数据框中的值。我曾尝试使用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

2 个答案:

答案 0 :(得分:0)

您误解了pandas.where的工作方式,如果条件为真,则会保留原始对象的值,否则,您可以尝试颠倒逻辑:

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

答案 1 :(得分:0)

在哪里可以让您拥有一个单行解决方案,这很棒。我更喜欢使用这样的面具。

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

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

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

只是另一种选择。