问题描述
我有两个多索引数据框:data1
和 data2
,我正在对其进行比较。
数据集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