如何在图表中绘制熊猫 groupby 值

Posted

技术标签:

【中文标题】如何在图表中绘制熊猫 groupby 值【英文标题】:How to plot pandas groupby values in a graph 【发布时间】:2017-12-31 03:27:43 【问题描述】:

我有一个 csv 文件,其中包含性别和婚姻状态以及如下几列。

Loan_ID,Gender,Married,Dependents,Education,Self_Employed,ApplicantIncome,CoapplicantIncome,LoanAmount,Loan_Amount_Term,Credit_History,Property_Area,Loan_Status
LP001002,Male,No,0,Graduate,No,5849,0,,360,1,Urban,Y
LP001003,Male,Yes,1,Graduate,No,4583,1508,128,360,1,Rural,N
LP001005,Male,Yes,0,Graduate,Yes,3000,0,66,360,1,Urban,Y
LP001006,Male,Yes,0,Not Graduate,No,2583,2358,120,360,1,Urban,Y
LP001008,Male,No,0,Graduate,No,6000,0,141,360,1,Urban,Y
LP001011,Male,Yes,2,Graduate,Yes,5417,4196,267,360,1,Urban,Y

我想数一下。已婚男性和女性的比例,如下图所示

下面是我正在使用的代码:

import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    x=[]
    y=[]
    df = pd.read_csv(
        "/home/train.csv",usecols=[1,2]).dropna(subset=['Gender','Married'])  # Reading the dataset in a dataframe using Pandas
    groups = df.groupby(['Gender','Married'])['Married'].apply(lambda x: x.count())
    print(groups)

分组后我有以下结果:

Gender  Married
Female  No          80
        Yes         31
Male    No         130
        Yes        357

我想要下面的图表

【问题讨论】:

【参考方案1】:

您可以使用groupby + size,然后使用Series.plot.bar

Difference between count and size.

groups = df.groupby(['Gender','Married']).size()
groups.plot.bar()

另一种解决方案是添加unstack 进行重塑或crosstab

print (df.groupby(['Gender','Married']).size().unstack(fill_value=0))
Married   No  Yes
Gender           
Female    80   31
Male     130  357

df.groupby(['Gender','Married']).size().unstack(fill_value=0).plot.bar()

或者:

pd.crosstab(df['Gender'],df['Married']).plot.bar()

【讨论】:

你使用 spyder/anaconda 吗? 但我认为你可以先使用import matplotlib.pyplot as plt,然后使用df.groupby(['Gender','Married']).size().unstack(fill_value=0‌​).plot.bar(),最后使用plt.show() 您能否解释一下上述解决方案中发生了什么? df.groupby(['Gender','Married']).size().unstack(fill_value=0) 这一行。 unstack 在这里会做什么?提前致谢 unstack 函数获取与多索引 ('column' Married) 和数据透视表相同的级别 - 创建列名并通过它重新排序数据。它被称为旋转。

以上是关于如何在图表中绘制熊猫 groupby 值的主要内容,如果未能解决你的问题,请参考以下文章

将熊猫 groupby 中的组绘制在一个图中时如何更改 x 轴

如何在熊猫中的 groupby().mean() 之后获取索引值列表?

如何分组并绘制它

熊猫如何根据条件在groupby中划分行列

熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]

如何绘制熊猫数据框的多列