我正尝试通过一系列两个group语句将分组行的值重新缩放为占总数的百分比,如下所示:
import pandas as pd
data = [{'name': 'A', 'x':1, 'y':1},{'name': 'B', 'x':2, 'y':4},{'name': 'A', 'x':3, 'y':2}]
df = pd.DataFrame(data)
df.groupby(['name','y']).size().groupby(level=0).apply(
lambda x: 100 * x / x.sum()
).to_frame().unstack()
我得到以下输出:
0
y 1 2 4
name
A 50.0 50.0 NaN
B NaN NaN 100.0
这是我正在寻找的输出,但是...在列标题中添加了额外的0维...是什么原因导致的以及如何消除它?
答案 0 :(得分:0)
我相信groupby(level=0)
部分是您的输出中新0电平的原因。没有0级且没有lambda,这似乎可以达到相同的效果。我相信我掌握了您的总体意图。
df.groupby(['name','y']).size().div(df.groupby('name')['y'].count()).unstack(level=-1) * 100
结果:
y 1 2 4
name
A 50.0 50.0 NaN
B NaN NaN 100.0