python - 使用多索引标准化 pandas DataFrame

标签 python pandas multi-index

给定,我需要按多索引中的级别 1 标准化数据

import pandas as pd
df = pd.DataFrame(np.arange(12).reshape(4,3), index=[["a","a","b","b"],[1,2,1,2]],
                  columns=["x","y","z"])

所以df

     x   y   z
a 1  0   1   2
  2  3   4   5
b 1  6   7   8
  2  9  10  11

我需要通过第一级索引对每一列进行标准化,以获得

     x       y      z
a 1  0      1/5    2/7
  2  1      4/5    5/7
b 1  6/15   7/17   8/19
  2  9/15  10/17  11/19

(尽管,显然,使用的是 float 而不是比率)

我想我可以通过迭代多索引第一级的列和值来做一些事情,但我确信有一个单行......

最佳答案

一个选项是使用 groupby:

df/df.groupby(level=0).transform('sum')
Out[87]: 
       x         y         z
a 1  0.0  0.200000  0.285714
  2  1.0  0.800000  0.714286
b 1  0.4  0.411765  0.421053
  2  0.6  0.588235  0.578947

关于python - 使用多索引标准化 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74440638/

相关文章:

python - 从电子邮件正文中提取域名

python-3.x - Pandas pd.melt 在使用 500GB ram 时在 unpivoting 3.5 GB csv 上抛出内存错误

python - 获取用户输入以选择 Pandas 对象

python - 将多个值添加到列中 - Pandas

python-3.x - Pandas Multiindex 行和列 : Replace NaN with Value from Matching Row

python - 如何在不修改数据框的情况下同时按列和多索引的一部分对 pandas 数据框进行排序

python - 如何在 pandas 数据框中快速高效地将两列( float )分类为一列?

Python Flask 将文件上传到服务器上的应用程序文件夹(heroku)

python - 重新索引特定级别的 pandas MultiIndex

Pandas 基于其他列向列多索引添加新的二级列