2017-10-02 4 views
0

다음 문제가 발생합니다. 나는 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 
내가 3 개 데이터 프레임이 df_cr, df_gt 불렀다

및 목록에 포함되어있는 df_ba, list_of_dfs = [df_cr,df_gt,df_ba] : Site_Sector는 다음과 같은 구조를 가지고 있습니다. 그들은 다음과 같은 구조를 가지고 (난 단지 두 개의 데이터 프레임을 입력합니다) : 가 포함되어있는 각 데이터 프레임의 분야 각 열에 대해 Site_Sector 열 데이터 프레임의 각 값을 비교에

#let's consider some data of df_cr as example 

| Date  | Site | Sector | KPI_1 | QA_value | Active | 
| --------- |---------- |----------|----------|----------| ------ | 
    09/12/2015  CR_XAZ XAZ_4532  50.0  100.0  Y 
    09/12/2015  CR_PET PET_2312  50.0  100.0  Y 
    09/13/2015  CR_XAZ XAZ_4532  50.0  100.0  Y 
    09/13/2015  CR_PET PET_2312  50.0  100.0  Y 
    09/14/2015  CR_XAZ XAZ_4532  30.0  60.0  Y 
    09/14/2015  CR_PET PET_2312  25.0  50.0  N 
    09/15/2015  CR_XAZ XAZ_4532  25.0  50.0  N 
    09/15/2015  CR_PET PET_2312  40.0  80.0  Y 
    09/16/2015  CR_XAZ XAZ_4532  35.0  70.0  Y 
    09/16/2015  CR_PET PET_2312  45.0  90.0  Y 
    09/17/2015  CR_XAZ XAZ_4532  15.0  30.0  N 
    09/17/2015  CR_PET PET_2312  50.0  100.0  Y 
    ..... 
    09/25/2015  CR_XAZ PET_4532  12.0  24.0  N 
    09/25/2015  CR_PET XAZ_2312  12.0  24.0  N 

#let's consider some data of df_ba as example 

| Date  | Site | Sector | KPI_1 | QA_value | Active | 
| --------- |--------- |----------| ---------|----------| ------ | 
    09/12/2015  CR_DEP DEP_1234  35.0  70.0  Y 
    09/12/2015  CR_XZT XZT_1212  50.0  100.0  Y 
    09/13/2015  CR_DEP DEP_1234  15.0  30.0  N 
    09/13/2015  CR_XZT XZT_1212  50.0  100.0  Y 
    09/14/2015  CR_DEP DEP_1234  35.0  70.0  Y 
    09/14/2015  CR_XZT XZT_1212  25.0  50.0  Y 
    09/15/2015  CR_DEP DEP_1234  25.0  50.0  Y 
    09/15/2015  CR_XZT XZT_1212  40.0  80.0  Y 
    09/16/2015  CR_DEP DEP_1234  15.0  30.0  N 
    09/16/2015  CR_XZT XZT_1212  45.0  90.0  Y 
    09/17/2015  CR_DEP DEP_1234  50.0  100.0  Y 
    09/17/2015  CR_XZT XZT_1212  50.0  100.0  Y 
    ..... 
    09/25/2015  CR_DEP DEP_1234  10.0  20.0  N 
    09/25/2015  CR_XZT XZT_1212  50.0  100.0  Y 

내 목표는 목록에. Site_Sector와 Sector 열이 일치하면 df_input 데이터 프레임에 Date, KPI_1, QA_value 및 Active 열을 추가하십시오.

#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 
    .... 

뭔가 명확하지 않았거나 자세한 내용이 필요한 경우 해당 게시물에 대해 언급하고 좀 더 설명 기꺼이하겠습니다.

답변

2

나는 지능형리스트 + 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 
+2

그래! 이 방법은 훨씬 깔끔합니다. – piRSquared

관련 문제