我有一个具有某些值的数据框,并希望根据条件在一行中交换值。如果该值大于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,但又遇到另一个错误。我不认为这是一个复杂的问题,但是我遇到了麻烦,因此非常感谢您的帮助!
答案 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