首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫用参考栏比较两种数据和它们的数据栏以找出差异

熊猫用参考栏比较两种数据和它们的数据栏以找出差异
EN

Stack Overflow用户
提问于 2021-02-23 07:37:08
回答 1查看 117关注 0票数 0

我试图根据参考栏比较熊猫中的两种数据,并找出它们的不同之处。

Dataframes如下所示

代码语言:javascript
复制
"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

最后的结果集应该如下所示。

  1. 删除在dataframe 2中不存在的引用
  2. 删除与
  3. 最后操作完全匹配的行,如

所示

“最终数据”:

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;

EN

回答 1

Stack Overflow用户

发布于 2021-02-23 07:53:54

首先将concatinner联接和键参数一起使用:

代码语言:javascript
复制
df = pd.concat([df1.set_index('ref'), df2.set_index('ref')], 
               axis=1, 
               join='inner',
               keys=('df1','df2'))

然后用DataFrame.xs比较选定的值,用numpy.whereMultiIndex.from_product创建新的DataFrame

代码语言:javascript
复制
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

将列连接起来并对列进行排序:

代码语言:javascript
复制
df = pd.concat([df, df1], axis=1).sort_index(axis=1, level=[1,0])

DataFrame.all删除等号行,用~消除倒掩

代码语言:javascript
复制
df = df[~mask.all(axis=1)]

代码语言:javascript
复制
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  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66328890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档