2

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

# 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。此外,有时我需要解决其他不等式。

任何指导将不胜感激。

谢谢!

4

1 回答 1

2

DataFrame.clip与 一起使用lower

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
于 2022-02-16T14:01:16.330 回答