2017-10-02 16 views
0

次の問題が発生しています。私はdf_inputをSite_Sectorという1つの列だけを含む入力データフレームとして持っています。 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と呼ばれる3つのデータフレーム、list_of_dfs = [df_cr,df_gt,df_ba]を持っています。彼らは、次の構造を持っている(私は2つのだけのデータフレームをダウン入力します):が含まれている各データフレームのセクタ列のそれぞれに対して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カラムが一致する場合は、Date、KPI_1、QA_value、Activeカラムを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 
    .... 

何かが明確ではなかったかの詳細が必要な場合は、この記事にコメント、私はより多くを説明するために喜んでいるでしょうしてください。

答えて

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

関連する問題