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中的所有组。
这里我应该只保留G1
和G4
并得到:
col1 col2
G1 A
G1 B
G1 C
G1 D
G4 I
G4 J
G4 K
有人有主意吗?
isin
,GroupBy.transform
和any
首先,我们使用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
您可以使用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