通过列表查询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 个回答
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