我试图根据参考栏比较熊猫中的两种数据,并找出它们的不同之处。
Dataframes如下所示
"Dataframe 1":
ref key1 key2 key3 key4 key5
001 vk11 vk12 vk13 vk14 vk15
002 vk21 vk22 vk23 vk24 vk25
003 vk31 vk32 vk33 vk34 vk35
004 vk41 vk42 vk43 vk44 vk45
005 vk51 vk52 vk53 vk54 vk55
006 vk61 vk62 vk63 vk64 vk65
"Dataframe 2":
ref key1 key2 key3 key4 key5
001 vk11 vk12 vk13 vk14 vk15
002 vk21 vkkk vk23 vk24 vk25
003 vk31 vk32 vk33 vkkk vk35
005 vkkk vkkk vkkk vk54 vk55最后的结果集应该如下所示。
所示
“最终数据”:
key key1 key2 key3 key4 key5 DF-1 DF-2 VALC 002 vk21 vk21 N vk22 vkkk Y vk23 vk23 N vk24 vk24 N vk25 N 003 vk25 N en21#N en23 vkkk Y en26#N 005 # vkkk Y vkkk Y#en28vk53 vkkk Y vk54 vk54 Y vk55 vk55 N
PC:值更改;DF1 - Dataframe 1;DF2 - Dataframe 2;
发布于 2021-02-23 07:53:54
首先将concat与inner联接和键参数一起使用:
df = pd.concat([df1.set_index('ref'), df2.set_index('ref')],
axis=1,
join='inner',
keys=('df1','df2'))然后用DataFrame.xs比较选定的值,用numpy.where和MultiIndex.from_product创建新的DataFrame
mask = df.xs('df1', axis=1).eq(df.xs('df2', axis=1))
df1 = pd.DataFrame(np.where(mask, 'N','Y'),
index=mask.index,
columns=pd.MultiIndex.from_product([['valc'], mask.columns]))
print (df1)
valc
key1 key2 key3 key4 key5
ref
1 N N N N N
2 N Y N N N
3 N N N Y N
5 Y Y Y N N将列连接起来并对列进行排序:
df = pd.concat([df, df1], axis=1).sort_index(axis=1, level=[1,0])用DataFrame.all删除等号行,用~消除倒掩
df = df[~mask.all(axis=1)]print (df)
df1 df2 valc df1 df2 valc df1 df2 valc df1 df2 valc df1 \
key1 key1 key1 key2 key2 key2 key3 key3 key3 key4 key4 key4 key5
ref
2 vk21 vk21 N vk22 vkkk Y vk23 vk23 N vk24 vk24 N vk25
3 vk31 vk31 N vk32 vk32 N vk33 vk33 N vk34 vkkk Y vk35
5 vk51 vkkk Y vk52 vkkk Y vk53 vkkk Y vk54 vk54 N vk55
df2 valc
key5 key5
ref
2 vk25 N
3 vk35 N
5 vk55 N https://stackoverflow.com/questions/66328890
复制相似问题