我有一个包含三个变量的数据框:
我想调查人口的浓度累积分布。
示例图如下所示:
上传样本数据集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_)
非常感谢任何更好的方法!
另外,如何使曲线平滑成第一个图?
答案 0 :(得分:1)
您可以使用pd.Series.cumsum
:
y_ = df.pop.cumsum() / df.pop.sum()
要进行平滑处理,您可以使用pd.Series.rolling
:
plot(x_, y_.rolling(3).mean())
应用低通滤波器(长度为3)。你应该考虑这是否是你想要的,但你的情节似乎是正确的。