我有一個資料框架,看起來像這樣:
我有一個資料框架。
dfA
名稱 欄位 國家 行動
Sam elec USA POS
Sam elec USA POS
Sam elec 美國 NEG
加拿大的Tommy mech NEG
湯米-機械加拿大NEG
Brian IT 西班牙 NEG
布萊恩IT西班牙NEG
Brian IT 西班牙 POS
我想根據前3列對資料框架進行分組,添加一個新的列 "No of data"。這是我使用的方法:
dfB = dfA. groupby(["name", "field", "country"], dropna=False) 。 size().reset_index(name = "No_of_data")
這給了我一個新的資料框架,看起來像這樣:
這給了我一個新的資料框架。
dfB
名稱 欄位 國家 No_of_data
Sam elec 美國 3
Tommy mech 加拿大 2
Brian IT 西班牙 3
但是現在我還想給這個特定的資料框架添加一個新的列,告訴我 "名稱"、"欄位 "和 "國家 "的每個組合的 "POS "數量是多少。這看起來應該是這樣的:
dfB
名稱 欄位 國家 No_of_data No_of_POS
Sam elec 美國 3 2
Tommy mech 加拿大 2 0
Brian IT 西班牙 3 1
當我沒有 "POS NEG "的資訊,需要從dfA中獲取時,我如何將新的列(No_of_POS)添加到dfB表中。
uj5u.com熱心網友回復:
你可以在aggregate方法中使用一個帶有函式的字典:
dfA. groupby(["name", "field", "country"], as_index=False) ['action']
.agg({'No_of_data': 'size'/span>, 'No_of_POS'/span>: lambda x: x.eq('POS').sum()})
uj5u.com熱心網友回復:
你可以在聚合之前預先計算布林值;隨著資料大小的增加,性能應該會更好 :
(df.assign(action = df.action.eq('POS')
.groupby(['name'/span>, 'field'/span>, 'country'/span>]。
sort = False,
as_index = False)
.agg(no_of_data = ('action', 'size') 。
no_of_pos = ('action', 'sum')
姓名 國家 no_of_data no_of_pos
0 Sam elec USA 3 2
1 Tommy mech Canada 2 0
2 Brian IT 西班牙 3 1
uj5u.com熱心網友回復:
當你對資料進行分組時,你可以添加一個聚合函式。查看agg()函式,也許這對你會有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/307654.html
標籤:
