比较python中的单独数据帧删除值

问题描述

我有两个多索引数据框:data1data2,我正在对其进行比较。

数据集data1 =内容

    Personalities   rating
Type
        warm         5
Cat    caring        7
      frightful      9
       happy         3

数据集data2 = 内容

    Personalities   rating
Type
          mean        3
Dog    ferocIoUs      8
         loyal        4
         happy        1
          warm        6

我想使用屏蔽操作来识别在两个数据框中的个性列中没有相同值的所有行(所有独特的个性值)。

然后,我需要从数据框中删除所有这些行,这样两个数据框的个性列中将具有相同的值。

我的尝试在于:new_data1['Personalities'].isin(new_data2['Personalities']).any(axis=1)

new_data1 = 的结果数据集

    Personalities   rating
Type
        warm         5
Cat    

       happy         3

new_data2 的结果数据集

    Personalities   rating
Type
          
Dog    

         happy        1
          warm        6

我想创建一个具有唯一值的新数据框,它看起来像这样: 在unique_data =

Personalities   rating
Type

Cat    caring        7
      frightful      9
Dog    mean          3
      ferocIoUs      8
      loyal          4
  

解决方法

输入数据:

>>> df1
     Personalities  Rating
Type
Cat           warm       5
Cat         caring       7
Cat      frightful       9
Cat          happy       3

>>> df2
     Personalities  Rating
Type
Dog           mean       3
Dog      ferocious       8
Dog          loyal       4
Dog          happy       1
Dog           warm       6

准备一些套装:

s1 = set(df1["Personalities"])
s2 = set(df2["Personalities"])

现在,您可以提取所需的数据:

new_data1 = df1.loc[df1["Personalities"].isin(s1.intersection(s2))]

new_data2 = df2.loc[df2["Personalities"].isin(s2.intersection(s1))]

unique_data = pd.concat([df1.loc[df1["Personalities"].isin(s1.difference(s2))],df2.loc[df2["Personalities"].isin(s2.difference(s1))]])
>>> new_data1
     Personalities  Rating
Type
Cat           warm       5
Cat          happy       3

>>> new_data2
     Personalities  Rating
Type
Dog          happy       1
Dog           warm       6

>>> unique_data
     Personalities  Rating
Type
Cat         caring       7
Cat      frightful       9
Dog           mean       3
Dog      ferocious       8
Dog          loyal       4