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

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

使用字典對多索引列進行分組

使用字典對多索引列進行分組

catspeake 2024-01-27 15:05:45
在具有單級別的 DataFrame 上,使用字典對列上的數據進行分組:df1 = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=['a','b','c','d','e','f','g','h'])dict_col= {'a':'ab','b':'ab','c':'c','d':'d','e':'efgh','f':'efgh','g':'efgh','h':'efgh'}df1.groupby(dict_col, axis=1).sum()    ab          c           d           efghA   1.014831    1.274621    -1.490353   -0.954438B   1.484857    -0.968642   0.700881    -3.281607C   0.898556    1.444362    0.680974    -2.985182在多索引數據幀上:MultiIndex = pd.MultiIndex.from_product([['bar', 'baz', 'foo', 'qux'], ['a','b','c','d','e','f','g','h']])df2 = pd.DataFrame(np.random.randn(3, 32), index=['A', 'B', 'C'], columns=MultiIndex)df2.groupby(dict_col, axis=1, level=1).sum()    ab          c           d           efghA   6.583721    -1.554734   1.922187    1.100208B   6.138441    0.653721    -0.204472   1.890755C   0.951489    2.695940    -1.494028   0.907464如何得到這樣的東西(0級上的所有元素)?    bar                                            baz                                              foo    ab          c           d           efgh       ab           c           d           efgh        ......    A   6.583721    -1.554734   1.922187    1.100208   4.944954     -1.343831   0.939265    -3.614612   ......B   6.138441    0.653721    -0.204472   1.890755   -0.347505    1.633708    0.392096    0.414880    ......C   0.951489    2.695940    -1.494028   0.907464   1.905409     -1.021097   -2.399670   0.799798    ......
查看完整描述

1 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

一種方法是將函數傳遞給groupby,然后將元組轉換回 MultiIndex


out = df2.groupby(lambda x: (x[0], dict_col[x[1]]), axis=1).sum()

out.columns = pd.MultiIndex.from_tuples(out.columns)

stack另一種方法是在之后unstack將列級別展平groupby:


df2.stack(level=0).groupby(dict_col, axis=1).sum().unstack(level=-1)


查看完整回答
反對 回復 2024-01-27
  • 1 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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