亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建每組百分比的數據框

創建每組百分比的數據框

慕工程0101907 2022-05-19 18:42:41
我有以下數據框,′data = {'ID':[279, 224, 221, 329, 333],    'GROUP':['BLACK', 'BLACK', 'BLUE', 'GREEN','BLACK'],    'ITEM_1':['Delhi', 'Kanpur', 'Delhi', 'Kannauj', 'Delhi'],    'ITEM_2':['Msc', 'Kanpur', 'Kanpur', 'Phd', 'Kanpur']}′′df = pd.DataFrame(data)′′df = df.set_index('ID')′ ID  Group    Item_1   Item_2279    A      Delhi    Msc224    A      Kanpur   Kanpur        221    B      Delhi    Kanpur    329    C      Kannauj  Phd333    A      Delhi    Kanpur如何創建以下數據框,行等于不同的項目和列與組,即            Delhi      KANPUR       Kannauj    Msc      Phd                     A         2/6%       3/6%         0%       1/6%      0%   B         1/2%       1/2%         0%        0%       0%   C           0%         0%       1/2%        0%     1/2%我的意思是,構建一個相對于每組總數的百分比數據框。任何想法將不勝感激。我雖然使用 groupby(['GROUP']) 和 .apply(lambda r: r/r.sum(), axis=1),但這不是我需要這個數據框的方式
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

首先合并這些列單列:


all_items = pd.concat([df.ITEM_1, df.ITEM_2])

all_items

Out[8]: 

ID

279      Delhi

224     Kanpur

221      Delhi

329    Kannauj

333      Delhi

279        Msc

224     Kanpur

221     Kanpur

329        Phd

333     Kanpur

dtype: object

然后,將其合并回 df:


temp_df = pd.concat([df[["GROUP"]].copy(), df[["GROUP"]].copy()])

temp_df["ITEM"] = all_items

temp_df.reset_index(inplace=True)

temp_df["temp_col"] = 1

temp_df

Out[15]: 

    ID  GROUP     ITEM  temp_col

0  279  BLACK    Delhi         1

1  224  BLACK   Kanpur         1

2  221   BLUE    Delhi         1

3  329  GREEN  Kannauj         1

4  333  BLACK    Delhi         1

5  279  BLACK      Msc         1

6  224  BLACK   Kanpur         1

7  221   BLUE   Kanpur         1

8  329  GREEN      Phd         1

9  333  BLACK   Kanpur         1

最后轉一下,


my_pivot = temp_df.pivot_table(values="temp_col", index="GROUP", columns="ITEM", aggfunc=np.sum, fill_value=0)

my_pivot = my_pivot / len(df)

# my_pivot / len (df) # <-- changing this to

to_div = my_pivot.aggregate(np.sum, axis=1) # <-- this and

my_pivot = my_pivot.div(to_div, axis=0) # <-- this

Out[31]: 

    ITEM      Delhi  Kannauj  Kanpur       Msc  Phd

GROUP                                          

BLACK  0.333333      0.0     0.5  0.166667  0.0

BLUE   0.500000      0.0     0.5  0.000000  0.0

GREEN  0.000000      0.5     0.0  0.000000  0.5

完畢。


查看完整回答
反對 回復 2022-05-19
  • 1 回答
  • 0 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號