为了账号安全,请及时绑定邮箱和手机立即绑定

从 DataFrame 中删除一列中仅包含单个唯一值的组

从 DataFrame 中删除一列中仅包含单个唯一值的组

慕运维8079593 2023-07-11 14:27:57
我正在用 Pandas 处理数据。“A”是唯一 ID 列,“E”列包含1或0。我只想保留 E 列的值同时包含 0 和 1 的组。(我想删除 A 列为 2 和 4 的行,因为这些组分别只包含 1 和 0,只留下 A 列为 1 的行, 3、5)。做这个的最好方式是什么?    A   B   C   D   E   F1   1   0   0   0   1   1163.72   1   0.8 0.8 2.2 0   03   1   0.2 0.2 4.4 0   04   1   0.8 0.4 0.4 0   05   1   0.5 0.7 3.8 0   06   2   1   1   8.9 1   1167   2   1.5 1.5 1.7 1   1168   2   2   2   8.7 1   1169   3   3   3   5.  0   010  3   4.5 4.5 2.2 0   011  3   6.0 6.5 0.8 0   012  3   8   8   0.3 0   013  3   5.3 0   0   1   11614  3   0   0   0   1   11615  4   0.8 0.8 1.1 0   016  4   0.2 0.5 3.4 0   017  4   0.4 0.8 3.2 0   018  4   0.7 0.5 3.0 0   019  5   1   1   1.5 0   020  5   1.5 1.5 1.7 0   021  5   2   2   7.9 1   116我想得到以下数据。       A   B   C   D   E   F1   1   0   0   0   1   1163.72   1   0.8 0.8 2.2 0   03   1   0.2 0.2 4.4 0   04   1   0.8 0.4 0.4 0   05   1   0.5 0.7 3.8 0   06   3   3   3   2.2 0   07   3   4.5 4.5 2.2 0   08   3   6.0 6.5 0.8 0   09   3   8   8   0.3 0   010  3   5.3 0   0   1   11611  3   0   0   0   1   11612  5   1   1   1.5 0   013  5   1.5 1.5 1.7 0   014  5   2   2   7.9 1   116
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

Series.groupby在列上使用E并transform使用any创建布尔掩码:


m = (df['E'].eq(0).groupby(df['A']).transform('any') &

     df['E'].eq(1).groupby(df['A']).transform('any'))

df1 = df[m]

E或者如果列仅由零和一组成的另一个想法,


m = df.groupby('A')['E'].nunique().eq(2)

df1 = df[df['A'].isin(m[m].index)]

结果:


print(df1)

    A    B    C    D  E       F

1   1  0.0  0.0  0.0  1  1163.7

2   1  0.8  0.8  2.2  0     0.0

3   1  0.2  0.2  4.4  0     0.0

4   1  0.8  0.4  0.4  0     0.0

5   1  0.5  0.7  3.8  0     0.0

9   3  3.0  3.0  5.0  0     0.0

10  3  4.5  4.5  2.2  0     0.0

11  3  6.0  6.5  0.8  0     0.0

12  3  8.0  8.0  0.3  0     0.0

13  3  5.3  0.0  0.0  1   116.0

14  3  0.0  0.0  0.0  1   116.0

19  5  1.0  1.0  1.5  0     0.0

20  5  1.5  1.5  1.7  0     0.0

21  5  2.0  2.0  7.9  1   116.0


查看完整回答
反对 回复 2023-07-11
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

drop_duplicates您可以在 A 和 E 列上使用groupby.size,并查看 A 组有 2 个不同元素的位置,因为 E 只有 0 或 1。然后使用大小等于 2 的索引,如下所示:


s = df[['A','E']].drop_duplicates().groupby('A').size()

df_ = df[df['A'].isin(s[s.eq(2)].index)].copy()

print(df_)

    A    B    C    D  E       F

1   1  0.0  0.0  0.0  1  1163.7

2   1  0.8  0.8  2.2  0     0.0

3   1  0.2  0.2  4.4  0     0.0

4   1  0.8  0.4  0.4  0     0.0

5   1  0.5  0.7  3.8  0     0.0

9   3  3.0  3.0  5.0  0     0.0

10  3  4.5  4.5  2.2  0     0.0

11  3  6.0  6.5  0.8  0     0.0

12  3  8.0  8.0  0.3  0     0.0

13  3  5.3  0.0  0.0  1   116.0

14  3  0.0  0.0  0.0  1   116.0

19  5  1.0  1.0  1.5  0     0.0

20  5  1.5  1.5  1.7  0     0.0

21  5  2.0  2.0  7.9  1   116.0


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信