我有一个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上,它需要几秒钟,这使得它非常不可行。
可以采取哪些措施来提高效率?
答案 0 :(得分:2)
如果值实际上只有1和0,您可以尝试使用df.sum(axis=1)
,然后检查总数是否大于列数的一半。例如,如果您有10列,请执行df[df.sum(axis=1)<=5]
。