Python 基于列中的元素存储和打印ECDF值
我有一个数据帧Python 基于列中的元素存储和打印ECDF值,python,pandas,dataframe,math,Python,Pandas,Dataframe,Math,我有一个数据帧df df= index value A 1 B 4 C 8 D 3 E 12 F 7 如何找到列df['value']中每个元素的经验累积分布函数(ECDF),并将相应的值存储在单独的列df['ECDF']。ECDF的公式为: 可以找到更多关于ECDF的文档。我还对绘制获得的CDF的折线图感兴趣 预期输出: df= index value ecdf A 1 0.1667 B 4
df
df=
index value
A 1
B 4
C 8
D 3
E 12
F 7
如何找到列df['value']
中每个元素的经验累积分布函数(ECDF),并将相应的值存储在单独的列df['ECDF']
。ECDF的公式为:
可以找到更多关于ECDF的文档。我还对绘制获得的CDF的折线图感兴趣
预期输出:
df=
index value ecdf
A 1 0.1667
B 4 0.5
C 8 0.8333
D 3 0.3333
E 12 1
F 7 0.6667
用于通过n
和method=max
(分配组中的最高等级)计算数值数据等级,并用于将其除以值中的项数
:
df['ecdf'] = df['value'].rank(method='max').div(df['value'].count())
结果:
index value ecdf
0 A 1 0.166667
1 B 4 0.500000
2 C 8 0.833333
3 D 3 0.333333
4 E 12 1.000000
5 F 7 0.666667
只需使用
numpy
和matplotlib
即可绘制CDF:
import numpy as np
import matplotlib.pyplot as plt
sample = df['value'].values
x = np.sort(sample)
y = np.arange(1,len(x)+1)/float(len(x))
plt.plot(x, y)
输出:
df=
index value ecdf
A 1 0.1667
B 4 0.5
C 8 0.8333
D 3 0.3333
E 12 1
F 7 0.6667
如果您能为获得的CDF绘制一个折线图,我将不胜感激。@Ganesh我认为您可以简单地使用
df['ecdf'].plot()
。它将按照df['ecdf'].
中给出的顺序依次绘制。但我想要一个CDF图。i、 e.ecdf
值随着我们向右移动而增加。我想你说的是df['ecdf'].cumsum().plot()
,对吧?不。别担心。我是从另一个解决方案得到的。