簡體   English   中英

使用pandas基於列查找兩個數據幀之間的公共行

[英]Finding common rows between two dataframes based on a column using pandas

我有兩個數據框。 我需要根據列“a”中的常見值提取行。 但是,我不想在最后創建一個數據框,而是要保留這兩個數據框。

例如:

###Consider the following input
df1 = pd.DataFrame({'a':[0,1,1,2,3,4], 'b':['q','r','s','t','u','v'],'c':['a','b','c','d','e','f']})

df2 = pd.DataFrame({'a':[1,4,5,6], 'b':['qq','rr','ss','tt'],'c':[1,2,3,4]})

預期的輸出是:


###df1:
      a.      b.     c
0.    1.      r.     a
1.    1.      s.     c 
2.    4.      v.     f


###df2:
      a.      b.     c
0.    1.      qq     1
1.    4.      rr     2


我怎樣才能達到以下結果? 見解將不勝感激。

df1 = df1[df1['a'].isin(df2['a'])].reset_index(drop=True)
df2 = df2[df2['a'].isin(df1['a'])].reset_index(drop=True)

你可以用 numpy 的intersect1d概括它

import numpy as np

intersection_arr = np.intersect1d(df1['a'], df2['a'])

df1 = df1.loc[df1['a'].isin(intersection_arr),:]
df2 = df2.loc[df2['a'].isin(intersection_arr),:]

兩個以上的數據框:

import numpy as np
from functools import reduce

intersection_arr = reduce(np.intersect1d, (df1['a'], df2['a'], df3['a']))

df1 = df1.loc[df1['a'].isin(intersection_arr),:]
df2 = df2.loc[df2['a'].isin(intersection_arr),:]
df3 = df3.loc[df3['a'].isin(intersection_arr),:]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM