首页 > 解决方案 > 如何根据熊猫中的多列条件删除行?

问题描述

假设我有以下熊猫数据框:

df = pd.DataFrame({"#":['a','a','a','a','b','b','b','c','c','d','d'],
              "$":[8,5,7,20,4,6,10,8,8,9,9],
              "C":[0,1,2,3,1,0,2,1,0,1,0]})


#   $   C
0   a   8   0
1   a   5   1
2   a   7   2
3   a   20  3
4   b   4   1
5   b   6   0
6   b   10  2
7   c   8   1
8   c   8   0
9   d   9   1
10  d   9   0

我希望删除“#”中的值在 C 列中只有 0 或 1 对应的行,在这种情况下,删除带有 0 的行并保留带有 1 的行。所以在我的情况下,只有值 c 和 d从 # 列开始,C 列中只有 0 和 1。因此,我必须删除 c 和 d 在 c 中为 0 的行并保留 1。我不能对 a 和 b 执行相同操作,因为它们映射到 0 以外的其他值和 C 中的 1。它只能是 0 和 1。

通过尝试多种方法,我偶然发现了这个可行的解决方案。

df.groupby(['#','$'], as_index=False)['C'].agg({'C':'max'})

但是,我无法使用此选项,因为在我的真实数据集中,我有多个包含空值的列,并且分组在我的情况下不起作用。因此,我正在寻找不同的解决方案。

解决方案数据框将如下所示:

    #   $   C
0   a   5   1
1   a   7   2
2   a   8   0
3   a   20  3
4   b   4   1
5   b   6   0
6   b   10  2
7   c   8   1
8   d   9   1

标签: pythonpandasgroup-by

解决方案


推荐阅读