我的代码是:
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)
文件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
实际上,我想绘制 0-17,18-59,60+ 岁患者的饼图。从代码中可以看出,我已经将不同年龄范围的数据框分开了。我需要在代码中添加什么来绘制饼图?
最佳答案
您首先需要 cut
来创建 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))
编辑:
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))
关于python - 如何使用不同范围的数据框组绘制饼图?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46542572/