公众号:尤而小屋
作者:Peter
编辑:Peter

本文讲解的是如何利用Pandas函数求解两个DataFrame的差集、交集、并集

4b8b136076b2601e133571409cf3cf43.jpeg

模拟数据

模拟一份简单的数据:

In [1]:

import pandas as pd

In [2]:

df1 = pd.DataFrame({"col1":[1,2,3,4,5],
                    "col2":[6,7,8,9,10]
                   })

df2 = pd.DataFrame({"col1":[1,3,7],
                    "col2":[6,8,10]
                   })

In [3]:

df1

Out[3]:


col1col2
016
127
238
349
4510

In [4]:

df2

Out[4]:


col1col2
016
138
2710

两个DataFrame的相同部分:

61d5be0c409b328812d6dab82c7f67d3.jpeg

差集

方法1:concat + drop_duplicates

In [5]:

df3 = pd.concat([df1,df2])
df3

Out[5]:


col1col2
016
127
238
349
4510
016
138
2710

In [6]:

# 结果1

df3.drop_duplicates(["col1","col2"],keep=False)

Out[6]:


col1col2
127
349
4510
2710

方法2:append + drop_duplicates

In [7]:

df4 = df1.append(df2)
df4

Out[7]:


col1col2
016
127
238
349
4510
016
138
2710

In [8]:

# 结果2

df4.drop_duplicates(["col1","col2"],keep=False)

Out[8]:


col1col2
127
349
4510
2710

交集

方法1:merge

In [9]:

# 结果

# 等效:df5 = pd.merge(df1, df2, how="inner")
df5 = pd.merge(df1,df2)

df5

Out[9]:


col1col2
016
138

方法2:concat + duplicated + loc

In [10]:

df6 = pd.concat([df1,df2])
df6

Out[10]:


col1col2
016
127
238
349
4510
016
138
2710

In [11]:

s = df6.duplicated(subset=['col1','col2'], keep='first')
s

Out[11]:

0    False
1    False
2    False
3    False
4    False
0     True
1     True
2    False
dtype: bool

In [12]:

# 结果
df8 = df6.loc[s == True]
df8

Out[12]:


col1col2
016
138

方法3:concat + groupby + query

In [13]:

# df6 = pd.concat([df1,df2])

df6

Out[13]:


col1col2
016
127
238
349
4510
016
138
2710

In [14]:

df9 = df6.groupby(["col1", "col2"]).size().reset_index()
df9.columns = ["col1", "col2", "count"]

df9

Out[14]:


col1col2count
0162
1271
2382
3491
45101
57101

In [15]:

df10 = df9.query("count > 1")[["col1", "col2"]]
df10

Out[15]:


col1col2
016
238

并集

方法1:concat + drop_duplicates

In [16]:

df11 = pd.concat([df1,df2])
df11

Out[16]:


col1col2
016
127
238
349
4510
016
138
2710

In [17]:

# 结果

# df12 = df11.drop_duplicates(subset=["col1","col2"],keep="last")
df12 = df11.drop_duplicates(subset=["col1","col2"],keep="first")
df12

Out[17]:


col1col2
016
127
238
349
4510
2710

方法2:append + drop_duplicates

In [18]:

df13 = df1.append(df2)

# df13.drop_duplicates(subset=["col1","col2"],keep="last")
df13.drop_duplicates(subset=["col1","col2"],keep="first")

Out[18]:


col1col2
016
127
238
349
4510
2710

方法3:merge

In [19]:

pd.merge(df1,df2,how="outer")

Out[19]:


col1col2
016
127
238
349
4510
5710
 
 

6db701b7979b545662eb7e60490477cd.jpeg

 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码(读博请说明)

2a18f729605d2e34b0ace669fcba4556.png

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐