我想过滤和替换。对于低于或高于零但不是NaN的列,我想设置为1和其他列,设置为零。
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
答案 0 :(得分:1)
如何使用apply
?
df[COLUMN_NAME] = df[COLUMN_NAME].apply(lambda x: 1 if x != 0 else 0)
答案 1 :(得分:1)
您可以通过在两个条件上应用逻辑AND并将结果掩码转换为整数来实现此目的。
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的元素的布尔掩码(这将包括&lt; 0,&gt; 0和NaN)。
第二个条件df['asset.relativeSetpoint.350'].notnull()
将获得不是NaN的元素的布尔掩码。
两个掩码是AND,并转换为整数。