gpt4 book ai didi

python - 查找包含多行匹配条件的组

转载 作者:行者123 更新时间:2023-12-03 21:45:03 25 4
gpt4 key购买 nike

鉴于以下数据框

df = pd.DataFrame({'A':list('AAAAAABBBBBCCCCCC'),
'B':list('EFGHIJEGHJKGHJKEI')})
|    | A   | B   |
|---:|:----|:----|
| 0 | A | E |
| 1 | A | F |
| 2 | A | G |
| 3 | A | H |
| 4 | A | I |
| 5 | A | J |
| 6 | B | E |
| 7 | B | G |
| 8 | B | H |
| 9 | B | J |
| 10 | B | K |
| 11 | C | G |
| 12 | C | H |
| 13 | C | J |
| 14 | C | K |
| 15 | C | E |
| 16 | C | I |
我想找到 A 中的所有元素哪里 B包含“G”、“H”和“I”
因此,结果应该是
|    | A   | B   |
|---:|:----|:----|
| 2 | A | G |
| 3 | A | H |
| 4 | A | I |
| 11 | C | G |
| 12 | C | H |
| 16 | C | I |
目前,我找到了以下解决方案,但这似乎过于骇人听闻,我觉得我错过了一些明显的东西
hit = list('GHI')
out = df[df.groupby('A').apply(lambda x: (x['B'].isin(hit))&(x['B'].isin(hit).sum()==len(hit))).values]

最佳答案

这种转换不是那么明显,但我们可以通过检查每个组与 hit 相比的大小来保持矢量化。 :

d = df[df['B'].isin(hit)]
size = d.groupby('A').size()
grps = size[size.eq(len(hit))].index

d[d['A'].isin(grps)]
    A  B
2 A G
3 A H
4 A I
11 C G
12 C H
16 C I

关于python - 查找包含多行匹配条件的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64977069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com