gpt4 book ai didi

python - Pandas - 查看 2 列并检查每列是否有不同的元素,如果两列都包含元素,则返回不同列中的值

转载 作者:行者123 更新时间:2023-11-30 22:11:20 24 4
gpt4 key购买 nike

我有一个包含 3 列的数据框(称为 all_names)。第一列称为 ID,第二列是“First_names”,第三列是“Last_names”——数据框有 100 万行。我有一个不同的数据框(称为组合),它有 2 行:“第一个”和“最后一个”。 (数据框还有一个索引列)。我需要同时检查 First_names 和 Last_names 列,看看它们是否包含另一个数据框中第一个和最后一个的组合。

目前,我有:

all_names['First_names'] = all_names.First_names.astype(str) #setting column to string data type
all_names['Last_names'] = all_names.Last_names.astype(str)
combos['First'] = combos.First.astype(str)
combos['Last'] = combos.Last.astype(str) #setting column to string data type

for index, row in combos.iterrows():
correct_IDS = all_names.loc[all_names.First_names.str.contains(row.First)] & all_names.loc[all_names.Last_names.str.contains(row.Last), 'ID']
print(correct_tiles)

但是,这不起作用并且很困惑,因为必须迭代所有行。任何帮助都会很棒

all_names 看起来像这样(在记事本中打开时):

,ID,First_names,Last_names
0,5231,Harry,Smith
1,2745,Mark,Hammond

组合看起来像这样(在记事本中打开时):

,First,Last
0,Liam,Bradnam
1,James,Beckham

最佳答案

您的问题可以使用合并来解决。假设我们有

all_names = pd.DataFrame({'First_names':['John','John','Bob','Robert'],
'Last_names':['Do','Smith','Do','Smith'],'ID':[1,2,3,4]})
combos = pd.DataFrame({'First':['John','Bob','Robert'],'Last':['Smith','Do','Do']})

然后,如果您在合并中使用rename,则使用how='inner'来保持两者之间的公共(public)对(First,Last)数据框:

combos.merge(all_names.rename(columns={'First_names':'First','Last_names':'Last'}),how='inner')

你会得到

    First   Last   ID
0 John Smith 2
1 Bob Do 3

现在,如果您只想要 ID 列表,则可以

list_ID = combos.merge(all_names.rename(columns={'First_names':'First','Last_names':'Last'})
,how='inner')['ID'].tolist()

并且您的 list_ID 等于 [2, 3]

关于python - Pandas - 查看 2 列并检查每列是否有不同的元素,如果两列都包含元素,则返回不同列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51445026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com