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,但又出现了一个错误。我不认为这是一个复杂的问题,但我有点卡住了,所以非常感谢帮助!
解决方案
您可以使用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
推荐阅读
- google-admin-sdk - GSUITE users.delete 和传输数据
- python - 旋转背景 PYQT5
- sql - 具有多个条件的 SQL 选择
- python - 为上周运行的相同代码运行 selenium 测试用例时出错
- r - R plotly():悬停模板格式
- javascript - 按字母顺序对对象数组进行排序并将空值移到末尾
- python - python-docx 用自定义内容替换 URL
- swift - 空文本字段时SwiftUI文本字段字体大小缩小
- python - TypeError: Enemy() 不接受任何参数我反复收到此错误
- c++ - Bazel 覆盖 C++ 构建 _coverage_report.data 为空