季节性归一化条形图

问题描述 投票:0回答:1

我有一个数据框,其中两列包含True和False,一列包含性别:男性和女性。

我正在尝试为每种性别计算每列的True数,但通过每种性别的数量进行归一化。

到目前为止,我所做的是根据整个数据名望df_up标准化我的数据。但是,如何针对每个性别的数量分别对它们进行归一化?

percentage = lambda x: sum(x) / len(df_up)
ax6 = sns.barplot(x="value", y="variable", hue="Gender", data=melted_fan, estimator=percentage, ci=None, palette=palette) 

enter image description here

python pandas bar-chart seaborn
1个回答
0
投票

我想这就是你所做的:

import seaborn as sns
import numpy as np
import pandas as pd
df = pd.DataFrame({'Gender':np.random.choice(["Female","Male"],100),
                  'star_wars_fan':np.random.choice([True,False],100),
                   'star_trek_fan':np.random.choice([True,False],100)
                  })

melted_fan = df.groupby('Gender').agg(sum).reset_index().melt(id_vars="Gender")
melted_fan

    Gender  variable    value
0   Female  star_wars_fan   29.0
1   Male    star_wars_fan   16.0
2   Female  star_trek_fan   26.0
3   Male    star_trek_fan   29.0

sns.barplot(x="value", y="variable", hue="Gender", 
                  data=melted_fan, ci=None)

enter image description here

不幸的是,在sns.barplot中,它被分成了子组,估计器是应用于每个组的函数,因此很难使用它。一种更简单的方法是在绘制之前计算百分比:

melted_fan['perc'] =  melted_fan.groupby('variable')['value'].apply(lambda x:100*x/x.sum())
sns.barplot(x="value", y="variable", hue="Gender", 
                  data=melted_fan, ci=None)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.