Pandas:将列表中不包含一个元素的所有不包含在col2中的组删除

问题描述 投票:1回答:2

Hel lo,我有一个df,例如:

col1 col2
G1 A
G1 B
G1 C
G1 D
G2 E
G2 F
G2 G
G3 H
G4 I
G4 J
G4 K

liste=['A','I','K']

而且我想删除列表中存在的一个元素不包含在col2中的所有组。

这里我应该只保留G1G4并得到:

 col1 col2
    G1 A
    G1 B
    G1 C
    G1 D
    G4 I
    G4 J
    G4 K

有人有主意吗?

python pandas
2个回答
2
投票

使用isinGroupBy.transformany

首先,我们使用isin检查哪些行包含liste中的元素。然后我们在GroupBy上进行col1并检查组中的any行是否包含列表的元素`

我们在此处使用transform而不是简单的GroupBy.any的原因是,我们希望返回一个与数据帧长度相同的向量,以进行逐行比较。

df[df['col2'].isin(liste).groupby(df['col1']).transform('any')]

   col1 col2
0    G1    A
1    G1    B
2    G1    C
3    G1    D
8    G4    I
9    G4    J
10   G4    K

0
投票

您可以使用groupby并申请:

df.groupby('col1').apply(lambda x: x if any(i in x['col2'].values for i in liste)
                                            else None).reset_index(level=0, drop=True)

它给出:

   col1 col2
0    G1    A
1    G1    B
2    G1    C
3    G1    D
8    G4    I
9    G4    J
10   G4    K
© www.soinside.com 2019 - 2024. All rights reserved.