import pandas as pd
C = {'name': ['Alice', 'Alice', 'Bob', 'Charlie'], 'phone': ['007', '1764', '1317210', '314159']}
CONTACTS = pd.DataFrame(data = C)
answer = {'guest_name': ['Alice', 'Bob', 'Charlie'], 'attending': [True, False, True]}
guest_list = pd.DataFrame(data = answer)
说明性上下文:
我要开一个派对,但是位置有最后一刻修改。因此,我想给客人说他们会来。
我有两个
pandas.DataFrame
:我的
CONTACTS
:带有我所有朋友的名字和电话。请注意,如果某些朋友(例如爱丽丝)有多个电话号码,则会列出两次。这个DataFrame是一个常量,我无法(或不想)对其进行修改。我的
guest_list
:带有我所有朋友的姓名和参加状态(布尔值)。请注意,与CONTACTS
不同,这里仅列出一次朋友名称。 name
中列出的所有朋友CONTACTS
都存在于guest_list
中,反之亦然(换句话说,CONTACTS.name
表示guest_list.guest_name
的宾语)。问题:我想创建一个
attending_guests_contact
数据框,其中包含仅参加聚会的朋友的联系方式。问题:如何基于
CONTACTS
布尔值获取answer.attending
的子集?注意:
我不想修改
CONTACTS
,我宁愿不创建
CONTACTS
的副本,因为我有“很多”联系人(〜10 ^ 3–10 ^ 4)并引发了多个参与者,因此这将浪费时间和内存(即,我想进行子选择)。编辑:两个DataFrame不再共享相同的标签列。
最佳答案
首先通过布尔值guest_list
列过滤attending
。第二次检查attending
中是否存在guest_list
中的CONTACTS
名称
CONTACTS[CONTACTS.name.isin(guest_list.loc[guest_list.attending,'guest_name'])]
name phone
0 Alice 007
1 Alice 1764
3 Charlie 314159
关于python - pandas.DataFrame:是否根据DF B中的数据过滤DF A中的行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49821843/