python - 如何使用 iloc 将条件语句应用于 Pandas Dataframe 上的多个列?

标签 python pandas database dataframe inequalities

假设我有一个像这样的数据框:

# importing pandas and numpy
import pandas as pd
import numpy as np

# create a sample dataframe
data = pd.DataFrame({
    'A' : [ 1, 2, 3, -1, -2, 3],
    'B' : [ -1, -2, -3, 12, -12, -3],
    'C' : [ 1, -2, 3, -1, -2, 13],
    'D' : [ -1, 2, 3, -1, 2, -3],
    'E' : [ 1, 12, 3, 11, -2, 3]
})

# view the data
data

这给出:

   A   B   C  D   E
0  1  -1   1 -1   1
1  2  -2  -2  2  12
2  3  -3   3  3   3
3 -1  12  -1 -1  11
4 -2 -12  -2  2  -2
5  3  -3  13 -3   3

现在,我的问题是如何将 if 语句应用于所有列和行,以便导致表中的所有值都被 if 语句值替换。

我想要应用的等式是:

if x <= 0:
    0
else:
    x

因此,在这种情况下,结果数据将消除所有负值:

   A   B   C  D   E
0  1   0   1  0   1
1  2   0   0  2  12
2  3   0   3  3   3
3  0  12   0  0  11
4  0   0   0  2   0
5  3   0  13  0   3

我尝试使用以下 loc 并将它们应用到 A、B、C、D 和 E:

data.loc[(data.A <= 0), ['A']] = 0
data.loc[(data.A > 0), ['A']] = data.A

但这不是最佳解决方案,因为我的列可能不止 A、B、C、D 和 E。此外,有时我需要解决其他不等式。

任何指导将不胜感激。

谢谢!

最佳答案

使用DataFrame.clip较低:

df = data.clip(lower=0)
print (df)
   A   B   C  D   E
0  1   0   1  0   1
1  2   0   0  2  12
2  3   0   3  3   3
3  0  12   0  0  11
4  0   0   0  2   0
5  3   0  13  0   3

仅适用于某些列:

cols = ['A','B','C']
data[cols] = data[cols].clip(lower=0)
print (data)
   A   B   C  D   E
0  1   0   1 -1   1
1  2   0   0  2  12
2  3   0   3  3   3
3  0  12   0 -1  11
4  0   0   0  2  -2
5  3   0  13 -3   3

关于python - 如何使用 iloc 将条件语句应用于 Pandas Dataframe 上的多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71143248/

相关文章:

Python Pandas 在列中求和一个常量值如果日期在两个日期之间

来自数组列表的 python pandas 数据框

php - PDO 与 MySQLi

python - JavaScript 的 Array.prototype.find 的 python 等价物是什么?

Python sklearn : why are my neighbors. KNeighborsRegressor 预测 "perfect"?

python - 在 Fedora Core 上安装 Gitosis 时出错

mysql - 数据库中的数据太多 - 需要做出 "replication"决策

python - 如何使用python 3解密SQLite数据库中的项目

python - 如何解决这个错误....使用a.empty、a.bool()、a.item()、a.any()或a.all()

javascript - 从 Firebase(网络)检索数据不起作用