python – 根据前几年的数据计算pandas数据帧行的百分位数
发布时间:2020-12-20 11:45:47 所属栏目:Python 来源:网络整理
导读:我有以下数据帧: datetime JD YEAR VAL 2000-01-01 1 2000 0.52000-01-02 2 2000 1.22000-01-03 3 2000 2.12000-01-04 4 2000 3.4 2000-01-05 5 2000 4.62000-01-06 6 2000 6.82000-01-07 7 2000 7.22000-01-08 8 2000 0.22000-01-09 9 2000 0.9...2010-12-
我有以下数据帧:
datetime JD YEAR VAL 2000-01-01 1 2000 0.5 2000-01-02 2 2000 1.2 2000-01-03 3 2000 2.1 2000-01-04 4 2000 3.4 2000-01-05 5 2000 4.6 2000-01-06 6 2000 6.8 2000-01-07 7 2000 7.2 2000-01-08 8 2000 0.2 2000-01-09 9 2000 0.9 ... 2010-12-31 365 2014 4.1 第一年是2000年,去年是2010年.没有闰年(即没有对应于2月29日的行),datetime是索引列. 我想计算一个新的数据帧,从2010年1月1日到2010年12月31日.我希望它包含一个列,用于计算由10个值组成的数组中的2010年1月1日值(VAL)的百分位数(2000年1月1日),2001年1月1日… 2009年1月1日).同样,2010年1月2日与前几年的1月2日进行了比较…. lyr = df.YEAR.max() # last year i.e. 2010 cdf = df[df.YEAR == lyr]# Latest year dataframe pdf = df[df.index.year < lyr] # Previous years dataframe pdf.groupby('JD')['VAL'] stats.percentileofscore(pdf['VAL'],cdf['VAL']) 但是,我不知道如何使代码工作. groupby只返回组,而我需要一个值列表. 解决方法
设置一个小样本数据帧:
np.random.seed(1234) df = pd.DataFrame({ 'jd': np.tile([1,2],3),'yr': np.repeat([2008,2009,2010],2),'val': np.random.randn(6) }) 然后它只是一行: df['pctile'] = df.groupby('jd')['val'].rank(pct=True) 这是输出,用sort_values排序([‘jd’,’val’]) jd val yr pctile 4 1 -0.720589 2010 0.333333 0 1 0.471435 2008 0.666667 2 1 1.432707 2009 1.000000 1 2 -1.190976 2008 0.333333 3 2 -0.312652 2009 0.666667 5 2 0.887163 2010 1.000000 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |