如何根据两个选定的熊猫系列绘制CDF图

时间:2018-04-06 11:31:13

标签: python pandas matplotlib

背景

我有一个包含三个变量的数据框:

  • 城市:中国的城市名称。
  • pop:相应城市的人口编号。
  • 浓度:相应城市的环境污染物浓度。

我想调查人口的浓度累积分布。

示例图如下所示:

enter image description here

上传样本数据集here

我的解决方案

df = pd.read_csv("./data/test.csv",)    
df = df[df.columns[1:]]
df = df.sort_values(by=['pm25'],ascending=False)
df = df.reset_index()

x_ = df['pm25'].values
y_ = []
for i in range(0,len(df)-1,1):
    y_.append(df['pop'].iloc[:i+1].sum()/df['pop'].sum())
y_.append(1.0)
plt.plot(x_,y_)

enter image description here

1

非常感谢任何更好的方法!

2

另外,如何使曲线平滑成第一个图?

1 个答案:

答案 0 :(得分:1)

您可以使用pd.Series.cumsum

替换循环
y_ = df.pop.cumsum() / df.pop.sum()

要进行平滑处理,您可以使用pd.Series.rolling

plot(x_, y_.rolling(3).mean())

应用低通滤波器(长度为3)。你应该考虑这是否是你想要的,但你的情节似乎是正确的。