如果其中一个列值与另一个数组匹配,则返回唯一 id 的数据帧及其所有行


df=
id - val1
1  -  50
2  -  40
1  -  60
2  -  41
a = [50]
output = id - val1
1  -  50
1  -  60

假设我有一个类似df的panda数据帧和一个类似"a"的数组。现在,如果df列的val1列的任何值与此数组匹配,我希望返回唯一id的所有条目(如输出(。我该怎么做?

您可以将groupby.transformisinany:一起使用

df[df.groupby('id')['val1'].transform(lambda x: x.isin(a).any())]

或者可替换地,嵌套的isin:

df.loc[df['id'].isin(df.loc[df['val1'].isin(a), 'id'])]

[out]

id  val1
0   1    50
2   1    60

您可以使用groupby的过滤器和任意过滤器来获得与匹配的唯一ID

a = [50]
df.groupby('id').filter(lambda x: x.val1.isin(a).any())
id  val1
0   1   50
2   1   60

最新更新