给定,我需要按多索引中的级别 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/