根据条件用 0 和 1 替换数据框中的值

Replacing values in dataframe with 0s and 1s based on conditions

我要过滤和替换。对于低于或高于零而不是 NaN 的列,我想将一个和其他列设置为零。

mask = ((ts[x] > 0) 
        | (ts[x] < 0))
ts[mask]=1
ts[ts[x]==1]

我这样做了并且正在工作,但我必须处理不符合此条件的值替换为零。 有什么建议吗?我很困惑,在这种情况下使用 where 函数会更好吗?

谢谢大家!

示例数据

    asset.relativeSetpoint.350
0                        -60.0
1                          0.0
2                          NaN
3                        100.0
4                          0.0
5                          NaN
6                       -120.0
7                       -245.0
8                          0.0
9                        123.0
10                         0.0
11                      -876.0

预期结果

    asset.relativeSetpoint.350
0                            1
1                            0
2                            0
3                            1
4                            0
5                            0
6                            1
7                            1
8                            0
9                            1
10                           0
11                           1

使用apply怎么样?

df[COLUMN_NAME] = df[COLUMN_NAME].apply(lambda x: 1 if x != 0 else 0)

您可以通过对两个条件应用逻辑与并将结果掩码转换为整数来实现。

df

    asset.relativeSetpoint.350
0                        -60.0
1                          0.0
2                          NaN
3                        100.0
4                          0.0
5                          NaN
6                       -120.0
7                       -245.0
8                          0.0
9                        123.0
10                         0.0
11                      -876.0
(df['asset.relativeSetpoint.350'].ne(0) 
 & df['asset.relativeSetpoint.350'].notnull()).astype(int)

0     1
1     0
2     0
3     1
4     0
5     0
6     1
7     1
8     0
9     1
10    0
11    1
Name: asset.relativeSetpoint.350, dtype: int64

第一个条件 df['asset.relativeSetpoint.350'].ne(0) 获取所有不等于 0 的元素的布尔掩码(这将包括 <0、>0 和 NaN)。

第二个条件 df['asset.relativeSetpoint.350'].notnull() 将获得非 NaN 元素的布尔掩码。

两个掩码进行与运算,并转换为整数。