通过列表查询pandas行

1 投票
1 回答
2901 浏览
提问于 2025-04-18 09:54

我有一个 pandas 数据框,想要找出在一个目标 ID 列表中出现的客户 ID 对应的行。

比如说,如果我的数据框长这样:

id    Name    ...    ...
-------------------------
1     Bob     ...    ...
2     Dave    ...    ...
2     Dave    ...    ...
3     Phil    ...    ...
4     Rick    ...    ...
4     Rick    ...    ...

基本上,我想要找出在这个数据框中出现超过一次的客户的行。所以我想要返回所有出现超过一次的 ID。

id    Name    ...    ...
-------------------------
2     Dave    ...    ...
2     Dave    ...    ...
4     Rick    ...    ...
4     Rick    ...    ...

我可以通过以下方式获取这些 ID 的列表:

grouped_ids = df.groupby('id').size()
id_list = grouped_ids[grouped_ids>1].index.tolist()

现在我想回到数据框中,返回所有与这个列表中的 ID 对应的行。

这样做可以吗?

谢谢你的帮助。

1 个回答

3

我想你是在寻找 isin() 这个方法:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'customer_id':range(5), 'A':('a', 'b', 'c', 'd', 'e')})

In [3]: df
Out[3]: 
   A  customer_id
0  a            0
1  b            1
2  c            2
3  d            3
4  e            4

In [4]: df[df.customer_id.isin((1,3))]
Out[4]: 
   A  customer_id
1  b            1
3  d            3

[编辑] 如果你想要匹配一个特定的目标列表,只需把它作为参数传给 isin() 方法就可以了:

In [5]: mylist = (1,3)

In [6]: df[df.customer_id.isin(mylist)]
Out[6]: 
       A  customer_id
1  abcde            1
3  abcde            3

撰写回答