首页 > 解决方案 > 根据条件更改数据框行中的值

问题描述

我有一个具有某些值的数据框,并希望在一个条件下交换一行中的值。如果该值大于 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,但又出现了一个错误。我不认为这是一个复杂的问题,但我有点卡住了,所以非常感谢帮助!

标签: pandas

解决方案


您可以使用loc-首先设置行以通过字符串替换值-在这里分配值Total,因为设置行标签Total,然后比较通过选择的此行的值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

详情

print (df.loc['Total'] < x)
a    False
b    False
c     True
Name: Total, dtype: bool

推荐阅读