首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于阈值的熊猫行过滤

基于阈值的熊猫行过滤
EN

Stack Overflow用户
提问于 2018-09-06 08:32:42
回答 1查看 211关注 0票数 1

我有以下数据框架。

代码语言:javascript
复制
    A1  A2  A3  B1  B2  B3  C1  C2  C3
0   0   0   1   1   1   1   0   1   1
1   0   0   0   0   0   0   0   0   0
2   1   1   1   0   1   1   1   1   1

我期待过滤它基于组的列和出现的非零。我写了以下文章来实现它。

代码语言:javascript
复制
import pandas as pd
df = pd.read_csv("TEST_TABLE.txt", sep='\t')
print(df)
group1 = ['A1','A2','A3']
group2 = ['B1','B2','B3']
group3 = ['C1','C2','C3']
df2 = df[(df[group1] !=0).any(axis=1) & (df[group2] !=0).any(axis=1) & (df[group3] !=0).any(axis=1)]
print(df2)

产出是完美的:

代码语言:javascript
复制
    A1  A2  A3  B1  B2  B3  C1  C2  C3
0   0   0   1   1   1   1   0   1   1
2   1   1   1   0   1   1   1   1   1

现在,如何修改代码,以便我可以为“任意”设置一个阈值。也就是说,为每个组保留至少2个非零行。因此,最终的输出将给出

代码语言:javascript
复制
   A1  A2  A3  B1  B2  B3  C1  C2  C3
2   1   1   1   0   1   1   1   1   1

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-06 08:39:33

您可以通过sum在循环中为计数非0值创建布尔掩码,比较ge (>=)和最后reduce masks

代码语言:javascript
复制
groups = [group1,group2,group3]
df2 = df[np.logical_and.reduce([(df[g]!=0).sum(axis=1).ge(2) for g in groups])]

print(df2)
   A1  A2  A3  B1  B2  B3  C1  C2  C3
2   1   1   1   0   1   1   1   1   1

细节

代码语言:javascript
复制
print([(df[g]!=0).sum(axis=1).ge(2) for g in groups])

[0    False
1    False
2     True
dtype: bool, 0     True
1    False
2     True
dtype: bool, 0     True
1    False
2     True
dtype: bool]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52199805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档