我有以下数据框架。
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我期待过滤它基于组的列和出现的非零。我写了以下文章来实现它。
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)产出是完美的:
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个非零行。因此,最终的输出将给出
A1 A2 A3 B1 B2 B3 C1 C2 C3
2 1 1 1 0 1 1 1 1 1提前谢谢。
发布于 2018-09-06 08:39:33
您可以通过sum在循环中为计数非0值创建布尔掩码,比较ge (>=)和最后reduce masks
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细节
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]https://stackoverflow.com/questions/52199805
复制相似问题