Python Seaborn标准化条形图

Python Seaborn标准化条形图,python,pandas,bar-chart,seaborn,Python,Pandas,Bar Chart,Seaborn,我有一个数据框架,其中两列包含True和False,一列包含genders:Male和Female 我试图为每一种性别的每一列计算True的数量,但通过每一种性别的数量进行标准化 到目前为止,我所做的是将我的数据与整个数据集进行规范化。但我如何根据每种性别的人数分别将其正常化呢 percentage = lambda x: sum(x) / len(df_up) ax6 = sns.barplot(x="value", y="variable", hue="Gender", data=melte

我有一个数据框架,其中两列包含True和False,一列包含genders:Male和Female

我试图为每一种性别的每一列计算True的数量,但通过每一种性别的数量进行标准化

到目前为止,我所做的是将我的数据与整个数据集进行规范化。但我如何根据每种性别的人数分别将其正常化呢

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) 

我猜这就是你所做的:

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)
不幸的是,在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)

我猜这就是你所做的:

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)
不幸的是,在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)

这种条形图可以通过以下方式构建:

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)
将matplotlib.pyplot作为plt导入 从matplotlib.ticker导入百分比格式化程序 作为pd进口熊猫 将numpy作为np导入 N=1000 df=pd.DataFrame{'starwars':np.random.randint0,2,N,dtype=np.bool, 《星际迷航》:np.random.randint0,2,N,dtype=np.bool, “性别”:np.随机选择[“男性”,“女性]],N,p=[0.6,0.4] } ax=df.groupby['Gender'][['starwars','startrek']].agg'mean'.transpose.plotkind='barh' ax.xaxis.set_major_formatterPercentFormatter1 节目
这种条形图可以通过以下方式构建:

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)
将matplotlib.pyplot作为plt导入 从matplotlib.ticker导入百分比格式化程序 作为pd进口熊猫 将numpy作为np导入 N=1000 df=pd.DataFrame{'starwars':np.random.randint0,2,N,dtype=np.bool, 《星际迷航》:np.random.randint0,2,N,dtype=np.bool, “性别”:np.随机选择[“男性”,“女性]],N,p=[0.6,0.4] } ax=df.groupby['Gender'][['starwars','startrek']].agg'mean'.transpose.plotkind='barh' ax.xaxis.set_major_formatterPercentFormatter1 节目