python - 如果组中的所有值都为零,则过滤掉整个组

标签 python pandas

使用 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/

相关文章:

python - 如何在 Windows 上为 Python 3.7 安装 Splunklib?

python - django使用分页时出错

python - 在print语句中,什么决定了python shell是打印空字符还是等待输入

python - openpyxl 如果包含数据则跳过该行

python - 加快 Pandas 数据框中的搜索速度

python - 将函数应用于 3d numpy 数组切片的最佳方法

Pandas groupby 并聚合多个列表

python - 如何通过唯一索引对 pandas 列求和,然后重置总和?

python - pandas 中的 str.zfill() 有 ' 字符问题

Python Pandas : Write certain rows in file