在条件下更改数据行中的值

时间:2019-05-20 13:25:04

标签: pandas

我有一个具有某些值的数据框,并希望根据条件在一行中交换值。如果该值大于x,我希望将其更改为零。我尝试使用.loc,但是每次尝试都会以某种方式收到Keyerror。 .loc是否可以选择行而不是列?我以前将其用于列,但无法使其用于行。

df = pd.DataFrame({'a': np.random.randn(4), 'b': np.random.randn(4), 'c': np.random.randn(4)})
print(df)
df.loc['Total'] = df.sum()
df.loc[(df['Total'] < x), ['Total']] = 0

我也尝试使用iloc,但又遇到另一个错误。我不认为这是一个复杂的问题,但是我遇到了麻烦,因此非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用loc分配值-首先设置按字符串排列的值行-在这里Total,因为设置行标签为Total,然后比较{{ 1}}-它返回布尔值掩码:

loc

详细信息

np.random.seed(2019)
df = pd.DataFrame({'a': np.random.randn(4), 'b': np.random.randn(4), 'c': np.random.randn(4)})
print(df)
          a         b         c
0 -0.217679 -0.361865 -0.235634
1  0.821455  0.685609  0.953490
2  1.481278  0.573761 -1.689625
3  1.331864  0.287728 -0.344943

df.loc['Total'] = df.sum()


x = 1
df.loc['Total', df.loc['Total'] < x] = 0
print (df)
              a         b         c
0     -0.217679 -0.361865 -0.235634
1      0.821455  0.685609  0.953490
2      1.481278  0.573761 -1.689625
3      1.331864  0.287728 -0.344943
Total  3.416918  1.185233  0.000000