我有一个给定的df值为0和nan.>
我想使用以下命令将所有值>;0重置为1,但前两列除外:
df_sort[df_sort.iloc[:,2] >= 0] = 1
其实,这改变了我的整个DF.
我只想重置值0并保留nans.>
谢谢
我有一个给定的df值为0和nan.>
我想使用以下命令将所有值>;0重置为1,但前两列除外:
df_sort[df_sort.iloc[:,2] >= 0] = 1
其实,这改变了我的整个DF.
我只想重置值0并保留nans.>
谢谢
您的蒙版不正确(切片已关闭,并且您没有完整的DataFrame形状),您应该使用:
mask = (df_sort.iloc[:, 2:].ge(0)
.reindex(columns=df_sort.columns,
fill_value=False)
)
df_sort[mask] = 1
Alternatively, with numpy broadcasting:
mask = df_sort.ge(0).to_numpy() & (np.arange(df_sort.shape[1])>2)[None]
df_sort[mask] = 1
示例输出:
0 1 2 3 4
0 0 None 1 1 None
1 None None None 1 None
2 1 2 1 None 1
3 0 0 1 1 1
4 2 None None 1 1
输出示例为>0
(而不是>=0
):
0 1 2 3 4
0 0 None 1 0 None
1 None None None 1 None
2 1 2 0 None 1
3 0 0 0 1 1
4 2 None None 1 0
如果您希望目标值>;0并且只包含整数,则还可以使用clip
和update
:
df_sort.update(df_sort.iloc[:, 2:].clip(upper=1))
print(df_sort)
使用的输入:
import numpy as np
import pandas as pd
np.random.seed(0)
df_sort = pd.DataFrame(np.random.choice([0, 1, 2, None], size=(5, 5)))
0 1 2 3 4
0 0 None 1 0 None
1 None None None 1 None
2 1 2 0 None 2
3 0 0 0 2 1
4 2 None None 2 0