2017-10-02 1 views
0

Ich stecke in dem folgenden Problem fest. Ich habe df_input als mein Eingabedatenrahmen, der nur 1 Spalte enthält, die Site_Sector genannt wird. Site_Sector hat die folgende Struktur:Vergleichen von Werten in einer Liste von Datenframes zu einer anderen Datenframesspalte

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 

Ich habe 3-Datenrahmen df_cr genannt, df_gt und df_ba, die in einer Liste enthalten sind, list_of_dfs = [df_cr,df_gt,df_ba]. Sie haben die folgende Struktur (I nur zwei Datenrahmen geben nach unten):

#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 

Mein Ziel ist es, jeden Wert des Rahmens Site_Sector Spaltendaten zu vergleichen, gegen jede der Sektor Spalten jeder Datenrahmen, die enthalten ist, in der Liste. Wenn eine Übereinstimmung zwischen Site_Sector- und Sector-Spalten besteht, fügen Sie die Spalten Date, KPI_1, QA_value und Active in den Datenrahmen df_input ein.

Wenn etwas nicht klar war oder mehr Details benötigt werden, bitte Kommentar zu diesem Beitrag und ich werde froh sein, mehr zu erklären.

Antwort

2

Ich würde tun dies mit einem Liste Verständnis + 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) 

für Ihre Eingabe, das ist, was man bekommt:

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

Yeah! Auf diese Weise viel sauberer. – piRSquared

Verwandte Themen