[英]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.