首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将公式应用于Pandas中特定行的枢轴表?

如何将公式应用于Pandas中特定行的枢轴表?
EN

Stack Overflow用户
提问于 2018-07-29 15:07:58
回答 1查看 679关注 0票数 2

原始df我有:

代码语言:javascript
复制
    year security_software  usage
0   2006        anti_virus     77
1   2006          firewall     64
2   2006  security_updates     59
3   2007        anti_virus     84
4   2007          firewall     71
5   2007  security_updates     52
6   2008        anti_virus     91
7   2008          firewall     81
8   2008  security_updates     63
9   2009        anti_virus     90
10  2009          firewall     83
11  2009  security_updates     61
12  2010        anti_virus     90
13  2010          firewall     85
14  2010  security_updates     67
15  2011        anti_virus     89
16  2011          firewall     84
17  2011  security_updates     61
18  2012        anti_virus     83
19  2012          firewall     72
20  2012  security_updates     52
21  2013        anti_virus     84
22  2013          firewall     71
23  2013  security_updates     75
24  2014        anti_virus     81
25  2014          firewall     69
26  2014  security_updates     79
27  2015        anti_virus     80
28  2015          firewall     61
29  2015  security_updates     79

我为我的数据创建了一个枢轴表,并为它添加了一个“总计”行,下面的命令如下所示。

代码语言:javascript
复制
sec_pivot = df.pivot(index="security_software",columns='year',values = "usage")
sec_pivot.loc['Total'] = sec_pivot.sum()
print(sec_pivot)

year security_software  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015
0           anti_virus    77    84    91    90    90    89    83    84    81    80
1             firewall    64    71    81    83    85    84    72    71    69    61
2     security_updates    59    52    63    61    67    61    52    75    79    79

如何在不影响“总计”行本身的情况下,将所有使用情况聚合更改为总值的百分比?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-29 15:31:10

您可以在索引切片中使用loc

代码语言:javascript
复制
sec_pivot.loc["anti_virus":"security_updates"]/sec_pivot.loc["Total"] * 100

year                2006    2007        2008    
security_software           
anti_virus          38.5    40.579710   38.723404
firewall            32.0    34.299517   34.468085
security_updates    29.5    25.120773   26.808511

如果要替换原始df中的值,只需将其赋值。

代码语言:javascript
复制
sec_pivot.loc["anti_virus":"security_updates"] = sec_pivot.loc["anti_virus":"security_updates"]/sec_pivot.loc["Total"] * 100



year                2006    2007        2008    
security_software           
anti_virus          38.5    40.579710   38.723404
firewall            32.0    34.299517   34.468085
security_updates    29.5    25.120773   26.808511
Total              200.0    207.000000  235.000000

如果没有索引,则会变得稍微复杂一些,但不会太复杂:

代码语言:javascript
复制
sec_pivot.loc[sec_pivot.index != 'Total', 1:] = sec_pivot[sec_pivot.index != 'Total'].iloc[:,1:]/sec_pivot.iloc[:,1:].loc["Total"] * 100

请注意,1:的意思是从第1列到末尾。我正在考虑你的年开始在列索引1(与2006年)。如果df中有其他列,则将1:更改为a:b,其中第一年列的索引为a,而b是去年列的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51581654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档