我有这个,
col1 col2
no yes no yes
index
A 2 8 2 6
B 0 2 1 1
我想要“是”列的百分比,如下所示,
col1 col2
yes yes
col0
A 0.8 0.75
B 1.0 0.5
我有这个,
col1 col2
no yes no yes
index
A 2 8 2 6
B 0 2 1 1
col1 col2
yes yes
col0
A 0.8 0.75
B 1.0 0.5
在算术方法中使用axis
和level
参数。
df.div(df.sum(axis=1, level=0), axis=1, level=0)
col1 col2
no yes no yes
A 0.2 0.8 0.25 0.75
B 0.0 1.0 0.50 0.50
df.div(df.sum(axis=1, level=0), axis=1, level=0).loc[:, pd.IndexSlice[:, 'yes']]
col1 col2
yes yes
A 0.8 0.75
B 1.0 0.50
变体
df.div(df.sum(axis=1, level=0), axis=1, level=0).xs('yes', axis=1, level=1)
col1 col2
yes yes
A 0.8 0.75
B 1.0 0.50
删除第二级
df.div(df.sum(axis=1, level=0), axis=1, level=0).xs('yes', axis=1, level=1)
col1 col2
A 0.8 0.75
B 1.0 0.50
简略版
df.div(df.sum(1, level=0), 1, 0).xs('yes', 1, 1)
col1 col2
A 0.8 0.75
B 1.0 0.50
详情
df.sum(axis=1, level=0)
col1 col2
A 10 8
B 2 2
div
指向使用这个结果。df.div(df.sum(axis=1, level=0), axis=1, level=0)
col1 col2
no yes no yes
A 0.2 0.8 0.25 0.75
B 0.0 1.0 0.50 0.50
设置
df = pd.DataFrame(
[[2, 8, 2, 6], [0, 2, 1, 1]],
list('AB'),
pd.MultiIndex.from_product([['col1', 'col2'], ['no', 'yes']])
)