如何使用不同范围的数据框组绘制饼图?
Posted
技术标签:
【中文标题】如何使用不同范围的数据框组绘制饼图?【英文标题】:How to plot pie chart using data frame group by different range? 【发布时间】:2018-03-14 12:45:25 【问题描述】:我的代码是:
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+ 岁患者的饼图。从代码中可以看出,我已经将不同年龄范围的数据框进行了分离。我需要在代码中添加什么来绘制饼图?
【问题讨论】:
我有点困惑——你需要什么情节?每个范围的总和或平均值?还是别的什么? 我想在饼图上绘制 0-17,18-59,60+ 范围内的年龄。 我明白,但我想念它的逻辑。因为显然每个范围只需要一个值... 这就是我想要的绘图方式:- drive.google.com/… 好的,这就是我所说的 - 只需要 3 个数字,每个范围一个。 【参考方案1】:您首先需要cut
来创建range
s。然后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))
【讨论】:
实际上这是来自单个文件的数据,它们是三个标签,即 0-17, 18-59, 60+ ,而不是三个不同的图。那你怎么知道我只需要一个饼图 有 3 个范围,所以需要 3 个图表。还是少了什么? 可能需要df.groupby(['Age']).size().plot.pie()
- 但没有关于垃圾箱的信息。
嗯,也许最好的办法是尝试在 excel 中创建这个图表并发布图片,因为我们似乎不了解对方。
我只需要一个包含 0-17,18-59,60+ 部分的饼图。以上是关于如何使用不同范围的数据框组绘制饼图?的主要内容,如果未能解决你的问题,请参考以下文章