簡體   English   中英

數據框的基於行的過濾器

[英]Row based Filter of a dataframe

我想對數據框執行分析。 這是我的數據框格式。

df_Input = pd.read_excel(“ / home / cc / Downloads / date.xlsx”)

ID    | BOOK |  Type
-----------------------     
1     | ABC  |   MAR
45    | PQR  |   TAB
45    | EDF  |   Fin
1     | DCF  |   oop
45    | PQR  |   TAB

我想找到計數(每個唯一值的計數)和每個唯一ID可以保存的唯一值。 輸出應為如下所示的數據框。

ID  |  BOOK_Count | Book_values  |Type_count |  Type_values
-----------------------------------------------------------
1   |    2        |  [ABC,DCF]   | 1         |    [MAR,oop]
45  |    2        |  [PQR,EDF]   | 2         |    [Fin,TAB]

我嘗試這樣做,但是有很多循環。 提前致謝

IIUC,您可以使用以下命令:

df_out = df.groupby('ID')['BOOK','Type'].agg(['nunique', lambda x: list(set(x))])
df_out = df_out.rename(columns={'nunique':'count', '<lambda>':'values'})
df_out.columns = df_out.columns.map('_'.join)
print(df_out)

輸出:

      BOOK_count BOOK_values  Type_count Type_values
ID                                                  
1_1            2  [ABC, DCF]           2  [MAR, oop]
45_2           2  [EDF, PQR]           2  [TAB, Fin]

假設我們有這個數據框:

    ID  BOOK type
0   1   ABC  MAR
1   0   PQR  TAB
2   1   EDF  Fin
3   0   DCF  oop
4   1   PQR  TAB

您可以使用json聚合格式,如下所示:

aggreg = {
'BOOK':{
    'BOOK_COUNT' : len,
    'BOOK_values' : lambda r : r.tolist()
},

'type':{
    'Type_COUNT' : len,
    'Type_values' : lambda r : r.tolist()
} 
}

然后,使用groupby

df.groupby('ID').agg(aggreg)

#output :
          BOOK              type
    BOOK_COUNT  BOOK_values Type_COUNT  Type_values
ID              
0            2    [PQR, DCF]        2   [TAB, oop]
1            3    [ABC, EDF, PQR]   3   [MAR, Fin, TAB]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM