使用 pandas,我想过滤掉所有只包含零值的组
所以在伪代码中是这样的
df.groupby('my_group')['values'].filter(all(iszero))
示例输入数据框可能是这样的
df = pd.DataFrame({'my_group': ['A', 'B', 'C', 'D']*3, 'values': [0 if (x % 4 == 0 or x == 11) else random.random() for x in range(12)]})
my_group values
0 A 0.000000
1 B 0.286104
2 C 0.359804
3 D 0.596152
4 A 0.000000
5 B 0.560742
6 C 0.534575
7 D 0.251302
8 A 0.000000
9 B 0.445010
10 C 0.750434
11 D 0.000000
这里,组 A
包含所有零值,因此应该将其过滤掉。 Group D
在第 11 行也有一个零值,但在其他行它有非零值,所以不应该被过滤掉
最佳答案
以下是从最佳性能到最差性能的可能解决方案:
#filtere groups by != 0 and then filter again original column by mask
df1 = df[df['my_group'].isin(df.loc[df['values'].ne(0), 'my_group'])]
#create mask by groupy.transform
df1 = df[df['values'].ne(0).groupby(df['my_group']).transform('any')]
#filtered by lambda function (if large data it is slow)
df1 = df.groupby('my_group').filter(lambda x: x['values'].ne(0).any())
print (df1)
my_group values
1 B 0.286104
2 C 0.359804
3 D 0.596152
5 B 0.560742
6 C 0.534575
7 D 0.251302
9 B 0.445010
10 C 0.750434
11 D 0.000000
关于python - 如果组中的所有值都为零,则过滤掉整个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71139386/