Python通过id值比较两个Excel,其他列中的“归档”输出与ID列有关的新excel差异
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python通过id值比较两个Excel,其他列中的“归档”输出与ID列有关的新excel差异相关的知识,希望对你有一定的参考价值。
我有两个excel(A.xlsx,B.xlsx,具有相同的工作表名称示例“ testdata”。数据格式如下所示。
现在我要执行此操作如果Filed是“ ADV”,则匹配文件A和B的“ id”,然后合并“ sum”,“ Stat”,“ Matur”,“ Block”新单元格。示例709606 a-> b打开->打开unass-> unass False-> False
基本上,我想比较相对于“已归档”字段的更改并匹配两个字段的“ id”,然后比较并将其他各列的更改放入新的excel文件中。
尝试了几种方法,这是不正确的
import datacompy, pandas as pd
df1=pd.read_excel('a.xlsx','sheet1', na_values=['NA'])
df2=pd.read_excel('b.xlsx','sheet1', na_values=['NA'])
result = df2.loc[df2['Filed'].isin(df1['Filed'])]
#print(result) Filed must be Filed=ADV then do differrrence only for ADV.
result.to_excel('diff.xlsx',index=False)
第二种方法:
compare = datacompy.Compare(
df1[df1['Filed']=='ADV'],
df2[df2['Filed']=='ADV'],
join_columns='Sum', #You can also specify a list of columns eg ['policyID','statecode']
abs_tol=0, #Optional, defaults to 0
rel_tol=0, #Optional, defaults to 0
df1_name='Original', #Optional, defaults to 'df1'
df2_name='New' #Optional, defaults to 'df2'
)
print(compare.report())
如何实现。非常欢迎任何解决方案。都不提供任何好的输出。我知道我没有正确编写逻辑。需要支持。谢谢。
答案
id = list(range(100))
filled_items = ["ADV", "KN", "BBL", "TOOL"]
sum_items = ["a", "b", "c", "d", "e", "f", "g"]
df = pd.DataFrame(columns=["id","filled", "sum"])
df1 = pd.DataFrame(columns=["id","filled", "sum"])
df["id"] = random.sample(id,100)
df1["id"] = random.sample(id,100)
df["sum"] = random.choices(sum_items,k =100)
df1["sum"] = random.choices(sum_items,k =100)
df["filled"] = random.choices(filled_items,k =100)
df1["filled"] = random.choices(filled_items,k =100)
#till here we created 2 sample dataframe
df4 = df1.merge(df.loc[df["filled"]=="ADV"], on = "id")
df["both_block"] = df[Block_x].astype(str)+"-->"+df[Block_y].astype(str)
以上是关于Python通过id值比较两个Excel,其他列中的“归档”输出与ID列有关的新excel差异的主要内容,如果未能解决你的问题,请参考以下文章