Python通过id值比较两个Excel,其他列中的“归档”输出与ID列有关的新excel差异

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python通过id值比较两个Excel,其他列中的“归档”输出与ID列有关的新excel差异相关的知识,希望对你有一定的参考价值。

我有两个excel(A.xlsx,B.xlsx,具有相同的工作表名称示例“ testdata”。数据格式如下所示。

A.xlsx(sheet2)enter image description here

B.xlsx(sheet2)enter image description here

现在我要执行此操作如果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差异的主要内容,如果未能解决你的问题,请参考以下文章

sql中怎么比较两个列中的最小值

根据其他三列中的值设置 R 列中的值

将所有列值与 Excel 中的单个单元格进行比较

Python Pandas - 如何在 Excel 工作表的特定列中写入

在excel中,用VBA实现两列数据的比较

匹配Excel中同一列中两个日期之间的所有值