Python 将数据帧列表中的值与另一个数据帧列进行比较

Python 将数据帧列表中的值与另一个数据帧列进行比较,python,pandas,dataframe,dataset,Python,Pandas,Dataframe,Dataset,我陷入了以下问题。我有df_input作为我的输入数据框,它只包含一列,称为Site_Sector。站点_扇区具有以下结构: Site_Sector -------------- DEP_1234 TRE_5421 YUT_0901 IOP_ABC3 POS_3456 MEC_2341 XAZ_4532 QPI_9012 KPI_1200 LPO_1300 KIN_9012 SVP_0001 .... JOP_1289 我有三个名为df

我陷入了以下问题。我有
df_input
作为我的输入数据框,它只包含一列,称为Site_Sector。站点_扇区具有以下结构:

 Site_Sector
--------------
  DEP_1234
  TRE_5421
  YUT_0901
  IOP_ABC3
  POS_3456
  MEC_2341
  XAZ_4532
  QPI_9012
  KPI_1200
  LPO_1300
  KIN_9012
  SVP_0001
  ....
  JOP_1289
我有三个名为df_cr、df_gt和df_ba的数据帧,它们包含在一个列表中,
list_of_dfs=[df_cr、df_gt、df_ba]
。它们具有以下结构(我将只键入两个数据帧):

我的目标是将Site_扇区列数据框的每个值与列表中包含的每个数据框的每个扇区列进行比较。如果站点_扇区和扇区列之间存在匹配,则将列Date、KPI_1、QA_value和Active添加到df_输入数据框中

 #expected output

 Site_Sector|  Date     | KPI_1| QA_value | Active 
----------------------------------------------------
  DEP_1234   09/12/2015   35.0    70.0        Y
  DEP_1234   09/13/2015   15.0    30.0        N
  DEP_1234   09/14/2015   35.0    70.0        Y
  DEP_1234   09/15/2015   25.0    50.0        N
   ....
  XAZ_4532   09/12/2015   50.0    100.0       Y
  XAZ_4532   09/13/2015   50.0    100.0       Y
  XAZ_4532   09/14/2015   30.0    60.0        Y
  XAZ_4532   09/15/2015   25.0    50.0        N
   ....
如果有什么不清楚的地方或者需要更多的细节,请在这篇文章上发表评论,我将很高兴解释更多。

我会用列表理解+
pd.Series.isin来做这件事:

data = df_input.Site_Sector
filtered_dfs = [x[x.Sector.isin(data)] for x in list_of_dfs]
output = pd.concat(filtered_dfs).drop('Site', 1)

对于您的输入,以下是您得到的:

print(output.sort_values('Sector'))
          Date    Sector  KPI_1  QA_value Active
0   09/12/2015  DEP_1234   35.0      70.0      Y
2   09/13/2015  DEP_1234   15.0      30.0      N
4   09/14/2015  DEP_1234   35.0      70.0      Y
6   09/15/2015  DEP_1234   25.0      50.0      Y
8   09/16/2015  DEP_1234   15.0      30.0      N
10  09/17/2015  DEP_1234   50.0     100.0      Y
12  09/25/2015  DEP_1234   10.0      20.0      N
0   09/12/2015  XAZ_4532   50.0     100.0      Y
2   09/13/2015  XAZ_4532   50.0     100.0      Y
4   09/14/2015  XAZ_4532   30.0      60.0      Y
6   09/15/2015  XAZ_4532   25.0      50.0      N
8   09/16/2015  XAZ_4532   35.0      70.0      Y
10  09/17/2015  XAZ_4532   15.0      30.0      N
我会用一个列表comprehension+
pd.Series.isin

data = df_input.Site_Sector
filtered_dfs = [x[x.Sector.isin(data)] for x in list_of_dfs]
output = pd.concat(filtered_dfs).drop('Site', 1)

对于您的输入,以下是您得到的:

print(output.sort_values('Sector'))
          Date    Sector  KPI_1  QA_value Active
0   09/12/2015  DEP_1234   35.0      70.0      Y
2   09/13/2015  DEP_1234   15.0      30.0      N
4   09/14/2015  DEP_1234   35.0      70.0      Y
6   09/15/2015  DEP_1234   25.0      50.0      Y
8   09/16/2015  DEP_1234   15.0      30.0      N
10  09/17/2015  DEP_1234   50.0     100.0      Y
12  09/25/2015  DEP_1234   10.0      20.0      N
0   09/12/2015  XAZ_4532   50.0     100.0      Y
2   09/13/2015  XAZ_4532   50.0     100.0      Y
4   09/14/2015  XAZ_4532   30.0      60.0      Y
6   09/15/2015  XAZ_4532   25.0      50.0      N
8   09/16/2015  XAZ_4532   35.0      70.0      Y
10  09/17/2015  XAZ_4532   15.0      30.0      N

是 啊这边干净多了,耶!这样更干净。