gpt4 book ai didi

python - 如何删除 Pandas 中包含少于行数 1% 的非零列?

转载 作者:行者123 更新时间:2023-12-04 03:28:23 25 4
gpt4 key购买 nike

我有以下数据集:

    Col1    Col2    Col3    Col4    Col5    Col6    Col7    Col8    Col9    Col10   ... 

Col991 Col992 Col993 Col994 Col995 Col996 Col997 Col998 Col999 Col1000
rows
Row1 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Row2 0 0 0 0 0 23 0 0 0 0 ... 0 0 0 0 7 0 0 0 0 0
Row3 97 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Row4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Row5 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Row496 182 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 116 0 0 0
Row497 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Row498 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Row499 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Row500 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 125 0 0 0

我正在尝试删除非零条目总数小于行数 1% 的列。

我可以按列计算非零条目的百分比

(df[df > 0.0].count()/df.shape[0])*100

我应该如何使用它来获取那些列的 df,其中列数仅在超过 1% 的行中具有非零值?此外,我应该如何更改代码以删除非零值少于列的 1% 的行?

最佳答案

您可以使用 loc 为新的 df 获取指定的列或行,如 this 所示。回答,基本上你可以这样做:

df.loc[rows, cols]  # accepts boolean lists/arrays

所以删除列的 df 可以用这个来实现:

col_condition = df[df > 0].count() / df.shape[0] >= .01
df_ = df[:, col_condition]

如果你需要在列和行之间切换,你可以简单地转置数据帧

df.T

对于非零数小于列长度 1% 的行也是如此:

row_condition = df.T[df.T > 0].count() / df.shape[1] >= .01
df_ = df[row_condition]

并以更简洁的形式:

df_ = df.loc[:, df.gt(0).mean() >= .01]  # keep columns
df_ = df[df.T.gt(0).mean() >= .01] # keep rows

关于python - 如何删除 Pandas 中包含少于行数 1% 的非零列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67254642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com