gpt4 book ai didi

python - Pandas:根据跨越所有列的条件有效排除行

转载 作者:行者123 更新时间:2023-12-01 04:59:50 26 4
gpt4 key购买 nike

我有一个 DataFrame,简化后可以如下所示:

ID     A    B    C
ID_1 0 1 1
ID_2 0 0 0
ID_3 1 1 0

等等。我需要做的是删除超过 50% 的列中出现“1”的行。

我想出了这个函数,使用apply:

def thresh_filter(value):
counts = value.value_counts(True) # Fraction based counts
if (counts.index == 1).any():
# Some rows are all 0s
return counts[1] > 0.50
else:
return False

为了让它更快,我也尝试了这个解决方案:

def thresh_filter(value):
counts = value.value_counts(True)
max_idx = counts.idxmax()
max_percentage = counts.max()
return max_idx == 1 and max_percentage > 0.50

然后使用它

result = mydf.apply(thresh_filter, axis=1)

问题是它非常慢。在具有 24 列的 50K 行 DataFrame 上,需要花费几秒钟的时间,这使得它相当不可行。

可以采取哪些措施来提高效率?

最佳答案

如果值确实只有 1 和 0,您可以尝试使用 df.sum(axis=1)然后检查总数是否大于列数的一半。例如,如果您有 10 列,请执行 df[df.sum(axis=1)<=5] .

关于python - Pandas:根据跨越所有列的条件有效排除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26502057/

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