python - 如何对多索引(行)的最外层求和?
问题描述
我试图弄清楚如何在我的多索引的最外层求和。因此,我想根据各个运营商以及为其列出的所有商店对 COUNTS 列求和。
df=pd.DataFrame(data.groupby('OPERATOR').SHOP.value_counts())
df=df.rename(columns={'SHOP':'COUNTS'})
df['COUNTS'] = df['COUNTS'].astype(float)
df['percentage']=df.groupby(['OPERATOR'])['COUNTS'].sum()
df['percentage']=df.sum(axis=0, level=['OPERATOR', 'SHOP'])
df.head()
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 3.0
FF9 1.0 1.0
IHI 1.0 1.0
Aegean HA9 33.0 33.0
IN9 24.0 24.0
当我使用 df.sum 调用时,它可以让我在两个级别上调用它,但是当我将其更改为 df.sum(axis=0, level=['OPERATOR'] 时,它会导致百分比列为 NaN。我最初的计数列是 int 所以我认为这可能是问题所在,并转换为浮点数,但这并没有解决问题。这是所需的输出:
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 5.0
FF9 1.0 5.0
IHI 1.0 5.0
Aegean HA9 33.0 57.0
IN9 24.0 57.0
(这只是计算每个商店相对于运营商的百分比的一个垫脚石,即最终的最终输出将是):
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 .6
FF9 1.0 .2
IHI 1.0 .2
Aegean HA9 33.0 .58
IN9 24.0 .42
因此,如果您还包括最后一步,则可以加分!!请帮我!!!
解决方案
分组OPERATOR
并规范化您的数据:
df['percentage'] = df.groupby('OPERATOR')['COUNTS'] \
.transform(lambda x: x / x.sum()) \
.round(2)
>>> df
COUNTS percentage
OPERATOR SHOP
AVIANCA CC9 3.0 0.60
FF9 1.0 0.20
IHI 1.0 0.20
Aegean HA9 33.0 0.58
IN9 24.0 0.42
推荐阅读
- java - 使用Java将返回值放入参数中
- flutter - 如何在颤动中为一个小部件应用两个补间?
- algorithm - 通过索引和元素删除快速查找的数据结构
- swift - 在整个窗口上显示新的 NSView 后,如何停止访问窗口中的所有 NSView?
- python-3.x - 最高 bin 的直方图边界
- x11 - X 会话响应鼠标事件,但不显示光标
- javascript - 如何在 R Shiny 中为 DT 使用 localStorage 选项?
- java - 在前缀 url 中查找最大匹配
- windows - Shellcode 中的弹出窗口
- node.js - OpenAPI & ExpressJS - 只打印第一个属性作为响应