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
是 啊这边干净多了,耶!这样更干净。