您现在的位置是:网站首页> 编程资料编程资料

详解利用Pandas求解两个DataFrame的差集,交集,并集_python_

2023-05-26 170人已围观

简介 详解利用Pandas求解两个DataFrame的差集,交集,并集_python_

大家好,我是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
349
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
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

以上就是详解利用Pandas求解两个DataFrame的差集,交集,并集的详细内容,更多关于Pandas DataFrame差集 交集 并集的资料请关注其它相关文章!

-六神源码网