Python 3.x Python通过id值和";“存档”;其他列中的输出在新excel中相对于ID列的差异

Python 3.x Python通过id值和";“存档”;其他列中的输出在新excel中相对于ID列的差异,python-3.x,pandas,data-science,Python 3.x,Pandas,Data Science,我有两个excel(A.xlsx,B.xlsx),它们具有相同的工作表名称,例如“testdata”。 数据格式如下所示 A.xlsx(第2张) B.xlsx(第2张) 现在我想做这个手术 如果文件为“ADV”,则匹配文件A和B的“id”,然后合并“sum”“Stat”“Matur”“Block”新单元格。 示例709606 a-->b打开-->打开未分配-->未分配错误-->错误 基本上,我想比较关于“field”字段的更改并匹配两个字段的“id”,然后比较并将其他列的更改放入新的exce

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

A.xlsx(第2张)

B.xlsx(第2张)

现在我想做这个手术 如果文件为“ADV”,则匹配文件A和B的“id”,然后合并“sum”“Stat”“Matur”“Block”新单元格。 示例709606 a-->b打开-->打开未分配-->未分配错误-->错误

基本上,我想比较关于“field”字段的更改并匹配两个字段的“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") #this is the line you need

df["both_block"] = df[Block_x].astype(str)+"-->"+df[Block_y].astype(str)
输出为

将sum_y和sum_x合并到单个列的步骤

df["both_block"] = df[Block_x].astype(str)+"-->"+df[Block_y].astype(str)

共享两个数据帧的示例(5,6行),而不是图片。将此作为指导。不理解您在此处所写的内容,合并将获取两个数据帧,并创建一个新的数据帧,其中每行中的“id”和“填充”在这df=df1的2个数据帧之间相等。合并(df2,on=[“id”,“filled”])我只想在文件class='ADV'的情况下检查差异和合并如何执行?