pandas DataFrame最有效的方法是将小于40%的行值更新为NaN?

iqxoj9l9  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(124)

我有大的 Dataframe ,需要找到所有的元素小于40%的行设置为NaN,元素未排序,重复这一点的每一行。
我可以强制计算,但你可以想象这不是很有效,没有有效的方法来做吗?
40%表示行元素的阶为asc,并且将低阶的40%元素设置为nan,不包含本身是nan的元素。1,21,20,4,5,6,7,9,10,11,则应将其排序为1,4,5,6,7,9,10,11,20,21,并删除1,4,5,6,最后成为nan,21,20,nan,nan,nan,7,9,10,11

NaN  21  20 NaN NaN NaN  7  9  10  11
ne5o7dgx

ne5o7dgx1#

使用DataFrame.count获取每行非缺失值的数量,然后通过双numpy.argsort按排序值的位置进行比较,最后通过掩码设置缺失值:

print (df)
   0   1   2   3   4   5   6    7   8   9     10
0   1   2   3  10   5   6   7  NaN   9   4  11.0
1   1  21  20   4   5   6   7  9.0  10  11   NaN

counts = df.count(axis=1).mul(0.4).to_numpy()[:, None]
arr = np.argsort(np.argsort(df.to_numpy()))

df[arr < counts] = np.nan
print (df)
   0     1     2     3    4    5   6    7   8     9     10
0 NaN   NaN   NaN  10.0  5.0  6.0   7  NaN   9   NaN  11.0
1 NaN  21.0  20.0   NaN  NaN  NaN   7  9.0  10  11.0   NaN

相关问题