2017-10-02 1 views
0

Je suis bloqué dans le problème suivant. J'ai df_input comme mon cadre de données d'entrée qui contient seulement 1 colonne appelée Site_Sector. Site_Sector a la structure suivante:Comparaison de valeurs dans une liste de données à une autre colonne de données

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 

J'ai 3 trames de données appelé df_cr, df_gt et df_ba qui sont contenus dans une liste, list_of_dfs = [df_cr,df_gt,df_ba]. Ils ont la structure suivante (je taperai vers le bas que deux trames de données):

#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 

Mon but est de comparer chaque valeur de la trame de données de la colonne Site_Sector contre chacune des colonnes du secteur de chaque trame de données contenues dans la liste. S'il existe une correspondance entre les colonnes Site_Sector et Sector, ajoutez les colonnes Date, KPI_1, QA_value et Active dans le bloc de données df_input.

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

Si quelque chose n'était pas clair ou si vous aviez besoin de plus de détails, veuillez commenter cet article et je serai heureux d'en donner plus.

Répondre

2

Je ferais cela avec une compréhension de la liste + 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) 

Pour votre entrée, c'est ce que vous obtenez:

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

Ouais! Beaucoup plus propre de cette façon. – piRSquared