如何使用不同范围的数据框组绘制饼图?

Yas*_*hvi 4 python csv matplotlib dataframe pandas

我的代码是:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style

df=pd.read_csv("patient1.csv")
a=df.loc[df.Age<18,['Age']]
print(a)
b=df.loc[(df.Age >= 18) & (df.Age < 60),['Age']]
print(b)
c=df.loc[df.Age>=60,['Age']]
print(c)
d=pd.concat([a,b,c],keys=["0-17","18-59","60+"])
e=d.loc[:,['Age']]
print(e)
Run Code Online (Sandbox Code Playgroud)

文件patient1.csv包含的数据如下:

Name    Surname Age
fdgf    bcbb    21
Yash    Singhvi 19
Yash    Singhvi 19
piyush  daga    20
cvcv    dfg     16
sdsd    sdsd    65
dsfef   fedf    12
rfef    fefe    70
fdgf    rgd     10
Run Code Online (Sandbox Code Playgroud)

实际上,我想绘制年龄 0-17,18-59,60+ 的患者的饼图。从代码中可以看出,我已经将不同年龄范围的数据框分开了。我需要在代码中添加什么来绘制饼图?

jez*_*ael 13

您首先需要cutcreate range。然后groupby,聚合size和重塑unstack

最后使用DataFrame.plot.pie

df['bins'] = pd.cut(df['Age'],bins=[0,17,59,120], labels=["0-17","18-59","60+"])
df = df.groupby(['Age', 'bins']).size().unstack(fill_value=0)
print (df)
bins  0-17  18-59  60+
Age                   
10       1      0    0
12       1      0    0
16       1      0    0
19       0      2    0
20       0      1    0
21       0      1    0
65       0      0    1
70       0      0    1

df.plot.pie(subplots=True,figsize=(8, 3))
Run Code Online (Sandbox Code Playgroud)

图形

编辑:

a = df.groupby('bins').size()
#a = df['bins'].value_counts()
print (a)
bins
0-17     3
18-59    4
60+      2
dtype: int64

a.plot.pie(figsize=(4,4))
Run Code Online (Sandbox Code Playgroud)

图形