gpt4 book ai didi

python - 查找两个 pandas Dataframe 之间的差异并将所有内容添加到新的 DF

转载 作者:行者123 更新时间:2023-12-01 06:32:27 30 4
gpt4 key购买 nike

我在 DataFrames 中有两个 Guest-List,我想知道哪些名字被删除,哪些名字被添加,然后获取一个新的 DF,我该怎么办?

这两个 DF 是:

list1 = {'First Name': ['Adi', 'Beni', 'Dimi', 'Sergei'], 'Last Name': ['Beer', 'Wine', 'Liquor', 'Vodka'], 'Job': ['Brewer', 'Farmer', 'Shopowner', 'Guest']}

list2 = {'First Name': ['Adi', 'Beni', 'Sergei', 'Don'], 'Last Name': ['Beer', 'Wine', 'Vodka', 'Brown']}

如果“NameX 在 list1list2 中,则使用两者中的名称创建一个新的 DataFrame。

如果 NameX 位于 list1 中,但在 list2 中退出,请在新的 df 中显示。

如果 NameX 仅在 list2 中,请向我显示在另一个 df 中。

我该怎么做?

顺便说一下,“Job”条目只存在于一个 df 中是有意为之的。将其保留在新的dfs中是我们的目标。

最佳答案

最简单的方法是将名字和姓氏放在一起,进行比较,然后再次分开。

下面是相应的代码:

FIRST_NAME = 'First Name'
LAST_NAME = 'Last Name'
JOB = 'Job'
KEYS = [FIRST_NAME, LAST_NAME, JOB]


def intersection(lst1, lst2):
return [value for value in lst1 if value in lst2]


def unzip(lst):
a = []
b = []
for x, y in lst:
a.append(x)
b.append(y)
return a, b


def get_jobs(dct, lst):
return [dct.get(x) for x in lst]


def get_dict(lst, dict0, keys=KEYS):
a, b = unzip(lst)
values = [a, b, get_jobs(dict0, lst)]
return dict(zip(keys, values))


list1 = {FIRST_NAME: ['Adi', 'Beni', 'Dimi', 'Sergei'], LAST_NAME: ['Beer', 'Wine', 'Liquor', 'Vodka'],
JOB: ['Brewer', 'Farmer', 'Shopowner', 'Guest']}
list2 = {FIRST_NAME: ['Adi', 'Beni', 'Sergei', 'Don'], LAST_NAME: ['Beer', 'Wine', 'Vodka', 'Brown']}

mapped1 = list(zip(list1.get(FIRST_NAME), list1.get(LAST_NAME)))
mapped2 = list(zip(list2.get(FIRST_NAME), list2.get(LAST_NAME)))
dict_jobs = dict(zip(mapped1, list1.get(JOB)))

intersec = intersection(mapped1, mapped2)
left = []
right = []

for element in set(mapped1) ^ set(mapped2):
left.append(element) if element in mapped1 else right.append(element)

dict_intersec = get_dict(intersec, dict_jobs)
dict_left = get_dict(left, dict_jobs)
dict_rigth = get_dict(right, dict_jobs)

输出:

{'First Name': ['Adi', 'Beni', 'Sergei'], 'Last Name': ['Beer', 'Wine', 'Vodka'], 'Job': ['Brewer', 'Farmer', 'Guest']}
{'First Name': ['Dimi'], 'Last Name': ['Liquor'], 'Job': ['Shopowner']}
{'First Name': ['Don'], 'Last Name': ['Brown'], 'Job': [None]}

dict_jobs中,合并的名称被映射到他们的工作。intersec 是包含两个原始列表中包含的名称的列表。left 包含仅出现在第一个列表中的名称,right 仅包含出现在第二个列表中的名称。

关于python - 查找两个 pandas Dataframe 之间的差异并将所有内容添加到新的 DF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59828981/

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