Python 如何基于选定的两个系列绘制CDF图 背景

Python 如何基于选定的两个系列绘制CDF图 背景,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个包含三个变量的数据框: 城市:中国境内的城市名称 pop:对应城市的人口数量 浓度:相应城市的环境污染物浓度 我想调查人口中浓度的累积分布 示例图如下所示: 样本数据集已上载 我的解决方案 1. 任何更好的方法都将受到高度赞赏 2. 另外,如何使曲线作为第一个绘图平滑?您可以使用以下方法替换回路: 对于平滑,可以使用: 应用低通滤波器(长度为3)。然而,你应该考虑这是否是你想要的,你的情节似乎是正确的。代码>循环确实是最愚蠢的方式。 df = pd.read_csv("./dat

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

  • 城市:中国境内的城市名称
  • pop:对应城市的人口数量
  • 浓度:相应城市的环境污染物浓度
我想调查人口中浓度的累积分布

示例图如下所示:

样本数据集已上载

我的解决方案

1. 任何更好的方法都将受到高度赞赏

2.
另外,如何使曲线作为第一个绘图平滑?

您可以使用以下方法替换回路:

对于平滑,可以使用:


应用低通滤波器(长度为3)。然而,你应该考虑这是否是你想要的,你的情节似乎是正确的。代码>循环确实是最愚蠢的方式。
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_)
y_ = df.pop.cumsum() / df.pop.sum()
plot(x_, y_.rolling(3).mean())