问题陈述:如果我们没有公共密钥(如屏幕上显示的任何附加密钥),如何执行外部联接
来自json的df\u a\u 1:
[
{
"bookid": "12345",
"bookname": "who am i"
}
]
来自json_2的df_b:
[
{
"bookid": "12345",
"bookname": "who am i",
"Author" : "asp"
}
]
现在,我想通过每个键和值来找出这两个datafrme之间的差异(因为我需要将输出写入html表,每个列的比较作为单独的df)
我在下面尝试的内容:
df1 = pd.merge(df_a[['bookid']],df_b[['bookid']],left_index=True,right_index=True)
df1['diff'] = np.where((df1['bookid_x']==df1['booid_y']),'No', 'Yes')
df2 = pd.merge(df_a[['bookname']],df_b[['bookname']],left_index=True,right_index=True)
df2['diff'] = np.where((df2['bookname_x']==df2['bookname_y']),'No', 'Yes')
df3 = What should i write here for that unknown column of Author coming from df2 ?
with open(r"c:\csv\booktest.html", 'w') as _file:
_file.write(df1.to_html(index=False) + "<br>" + df2.to_html(index=False) + "<br>" + df3.to_html(index=False))
问题是df_b数据来自不同的源,它可能有额外的列和值(我不知道什么是列名)
预期输出:(因此,当我最终比较两个df时,例如,由于作者列是我从df2中获得的新列,而DFU a中不存在该列,因此应该在那里打印NaN
bookid bookid diff
12345 12345 No
bookname bookname diff
who am i who am i No
Author Author diff
NaN asp Yes
一种方法是使用
.align()
对齐两个数据帧,使列相同一旦执行此操作,
df_a
和df_b
将具有相同的列现在,您可以应用必须获得的逻辑
df3
结果:
编辑:
当然,对于df中的每一列,您可以将公共语句放入循环中
或者更有效地,您可以这样做-合并两个dfs(按所有列),然后找到这对列之间的差异,并在列循环中导出为html
您也可以在不使用
.merge
的情况下执行此操作,但要在html中以dataframe格式获得它,您必须为每个列初始化dataframe结果:
编辑2:
根据注释固定对齐
结果:
编辑3
如果列的所有值都是
NaN
,则将列名称设置为空结果:
相关问题 更多 >
编程相关推荐