社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python】DataFrame差集/交集/并集求解

机器学习初学者 • 2 年前 • 318 次点击  

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

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

模拟数据

模拟一份简单的数据:

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
34 9
4510

In [4]:

df2

Out[4]:


col1col2
016
138
2710

两个DataFrame的相同部分:

差集

方法1:concat + drop_duplicates

In [5]:

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

Out[5]:


col1col2
01 6
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
0 16
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
0 162
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





    
往期精彩回顾




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/137518
 
318 次点击