![](/img/trans.png)
[英]Python/Pandas: filter and organize the rows and columns of a dataframe based on another dataframe
[英]Filter dataframes based on 2 columns of another dataframe in python
我有一個像這樣的數據幀:
data = {'Name':['Tom', 'Jack', 'nick', 'juli', 'Tom', 'nick', 'juli','nick', 'juli','Tom'], 'subject': ['eng', 'maths', 'geo', 'maths', 'science', 'geo', 'maths', 'maths', 'geo', 'science'], 'marks':[99, 98, 95, 90, 99, 98, 97, 95, 96, 98]}
df1 = pd.DataFrame(data)
df1
Name subject marks
0 Tom eng 99
1 Jack maths 98
2 nick geo 95
3 juli maths 90
4 Tom science 99
5 nick geo 98
6 juli maths 97
7 nick maths 95
8 juli geo 96
9 Tom science 98
另一個數據框為:
data2 = {'Name':['Jack', 'nick', 'Tom', 'juli', 'Tom', 'nick','nick', 'juli'], 'subject': ['eng', 'maths', 'geo', 'maths', 'science', 'geo', 'maths', 'geo']}
df2 = pd.DataFrame(data2)
df2
Name subject
0 Jack eng
1 nick maths
2 Tom geo
3 juli maths
4 Tom science
5 nick geo
6 nick maths
7 juli geo
我想根據 df1 中“名稱”和“主題”的組合過濾 df2。 如果 df1 中“名稱”和“主題”的特定組合出現不止一次,然后在 df2 中匹配。 如果匹配,那么我們從 df2 中獲取這些行作為輸出。
期望的輸出:
pd.DataFrame({'Names':['Tom', 'juli', 'nick'], 'subject': ['science', 'maths', 'geo']})
Name subject
0 nick geo
1 juli maths
2 Tom science
任何人都可以在不使用“合並”選項的情況下提供幫助嗎?
我相信您只需要通過DataFrame.duplicated
過濾具有重復值的行,使用keep=False
鏈接而不使用此參數,並為它們第一行,然后使用merge
進行內部連接:
df11 = df1[df1.duplicated(subset=['Name','subject'], keep=False) &
df1.duplicated(subset=['Name','subject'])]
df3 = df11.merge(df2, suffixes=('_',''))[df2.columns]
print (df3)
Name subject
0 nick geo
1 juli maths
2 Tom science
另一個類似的想法是在merge
按df2
過濾列:
cols = df2.columns
df11 = df1.loc[df1[cols].duplicated(keep=False) & df1[cols].duplicated(), cols]
df3 = df11.merge(df2)
print (df3)
Name subject
0 nick geo
1 juli maths
2 Tom science
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.