gpt4 book ai didi

Python Pandas 数据透视表 - 将计算列添加到多索引列

转载 作者:行者123 更新时间:2023-11-30 22:57:44 26 4
gpt4 key购买 nike

我有以下数据透视表,它是一个多索引,用于索引和列:

Category        HF                      DA      
tafp tap tw tafp tap tafp
ATTR EL
attr1 1.0 10 25 15 100 150 50
attr2 2.0 0 0 0 40 70 30
3.0 20 50 30 0 0 0
attr3 2.0 0 0 0 0 0 0

这是此数据透视表的字典(值有点不同,但这并不重要):

{
('HF', 'tafp'): {('attr1', '1.0'): 10, ('attr2', '2.0'): 100, ('attr3','2.0'): 0, ('attr4', '2.0'): 0, ('attr2', '3.0'): 71},
('HF', 'tap'): {('attr1', '1.0'): 30, ('attr2', '2.0'): 350, ('attr3', '2.0'): 0, ('attr4', '2.0'): 0, ('attr2', '3.0'): 1042},
('HF', 'tw'): {('attr1', '1.0'): 20, ('attr2', '2.0'): 250, ('attr3', '2.0'): 0, ('attr4', '2.0'): 0, ('attr2', '3.0'): 971},
('DA', 'tafp'): {('attr1', '1.0'): 0, ('attr2', '2.0'): 435, ('attr3', '2.0'): 0, ('attr4', '2.0'): 0, ('attr2', '3.0'): 0},
('DA', 'tap'): {('attr1', '1.0'): 0, ('attr2', '2.0'): 635, ('attr3', '2.0'): 0, ('attr4', '2.0'): 0, ('attr2', '3.0'): 0},
('DA', 'tw'): {('attr1', '1.0'): 0, ('attr2', '2.0'): 200, ('attr3', '2.0'): 0, ('attr4', '2.0'): 0, ('attr2', '3.0'): 0}
}

我最终想要得到的是:

Category        HF                      DA      
tafp/tap tw tafp/tap tafp
ATTR EL
attr1 1.0 0.67 15 0.67 50
attr2 2.0 0 0 0.57 30
3.0 0.67 30 0 0
attr3 2.0 0 0 0 0

所以我想获取tafp/tap的百分比并只保留这个计算列,即删除原始列。

有人知道我如何实现这一目标吗?

非常感谢任何帮助:)

最佳答案

在某些步骤中。

第一个堆栈级别 0 ('DA,HF') 让级别 1 ('tafp','tap') 作为列以便于处理。

df=df.stack(level=0)
"""
tafp tap tw
attr1 1.0 DA 0 0 0
HF 10 30 20
attr2 2.0 DA 435 635 200
HF 100 350 250
3.0 DA 0 0 0
HF 71 1042 971
attr3 2.0 DA 0 0 0
HF 0 0 0
attr4 2.0 DA 0 0 0
HF 0 0 0
"""

然后操作:

valid=df.tap>0
df.tafp[valid] /= df.tap[valid]

最后重新格式化:

df=df.drop('tap',axis=1).unstack()
df.reorder_levels([1,0],axis=1).sort_index(axis=1)

对于:

"""
DA HF
tafp tw tafp tw
attr1 1.0 0.000000 0 0.333333 20
attr2 2.0 0.685039 200 0.285714 250
3.0 0.000000 0 0.068138 971
attr3 2.0 0.000000 0 0.000000 0
attr4 2.0 0.000000 0 0.000000 0
"""

关于Python Pandas 数据透视表 - 将计算列添加到多索引列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36503182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com