如何在图形中绘制pandas groupby值?

2024-05-20 16:45:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

我想要一张如下的图表

enter image description here


Tags: csvnoimportdfasgendermaleyes
1条回答
网友
1楼 · 发布于 2024-05-20 16:45:25

您可以使用^{}+^{},然后使用^{}

Difference between count and size

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

graph

另一种解决方案是添加^{}用于整形或^{}

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()

graph

相关问题 更多 >