pandas按列表查询行

时间:2014-06-16 05:40:09

标签: python list pandas

我有一个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 个答案:

答案 0 :(得分:2)

我猜您正在寻找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

[edit]要匹配给定的目标列表,只需将其用作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