Python 熊猫:按指数值分组,然后计算分位数?

Python 熊猫:按指数值分组,然后计算分位数?,python,pandas,dataframe,Python,Pandas,Dataframe,我在month列中索引了一个数据帧(如果相关,则使用df=df.set_index('month')设置): 我想添加一个名为quantile的新列,该列将根据该月的ratio\u cost值为每一行分配一个分位数值 因此,上面的示例可能如下所示: org_code ratio_cost quantile month 2010-08-01 1847 8.685939 100 2010-08-01 1848 7.883951

我在
month
列中索引了一个数据帧(如果相关,则使用
df=df.set_index('month')
设置):

我想添加一个名为
quantile
的新列,该列将根据该月的
ratio\u cost
值为每一行分配一个分位数值

因此,上面的示例可能如下所示:

             org_code  ratio_cost   quantile
month
2010-08-01   1847      8.685939     100 
2010-08-01   1848      7.883951     66.6 
2010-08-01   1849      6.798465     0  
2010-08-01   1850      7.352603     33.3
2010-09-01   1847      8.778501     100
我该怎么做?我试过这个:

df['quantile'] = df.groupby('month')['ratio_cost'].rank(pct=True)
但是我得到了
keyrerror:“month”

更新:我可以复制错误

这是我的CSV文件:

下面是重现错误的代码:

df = pd.read_csv('temp.csv')
df.month = pd.to_datetime(df.month, unit='s')
df = df.set_index('month')
df['percentile'] = df.groupby(df.index)['ratio_cost'].rank(pct=True)
print df['percentile']
我正在OSX上使用Pandas 0.17.1

您必须在:


分位数查看比率成本的分布,并找到95%的百分位区域。通过计算q_截止值来计算分位数。然后屏蔽结果值

month=['2010-08-01','2010-08-01','2010-08-01','2010-08-01','2010-09-01']
org_code=[1847,1848,1849,1850,1847]
ratio_cost=[8.685939,7.883951,6.798465,7.352603,8.778501] 
df=pd.DataFrame({'month':month,'org_code':org_code,'ratio_cost':ratio_cost})

q_cutoff = df['ratio_cost'].quantile(0.95)
mask=df['ratio_cost'] < q_cutoff
trimmed_df=df[mask]

 print(trimmed_df)
month=['2010-08-01','2010-08-01','2010-08-01','2010-08-01','2010-08-01','2010-09-01']
组织代码=[18471848184918501847]
成本比率=[8.685939,7.883951,6.798465,7.352603,8.778501]
df=pd.DataFrame({'month':month,'org\u code':org\u code,'ratio\u cost':ratio\u cost})
q_截止值=df[“成本比率”]。分位数(0.95)
掩码=df[“成本比率”]
try
df['quantile']=df.groupby(df.index)['ratio\u cost'].rank(pct=True)
df['quantile']=df.groupby(level=0)['ratio\u cost'].rank(pct=True)
谢谢。我试着只打印df.groupby(level=0),但它给了我
提升值错误
。与
df.groupby(df.index)
相同。啊,月份列是一个日期时间-这有问题吗?我已经更新了问题以显示它产生了什么。谢谢,但这是我最初尝试的,它在问题中…实际上是
.rank()
调用产生了错误-请参阅更新。
import pandas as pd

df = pd.read_csv('http://pastebin.com/raw/6xbjvEL0')

df.month = pd.to_datetime(df.month, unit='s')
df = df.set_index('month')

df = df.sort_index()

df['percentile'] = df.groupby(df.index)['ratio_cost'].rank(pct=True)
print df['percentile'].head()

month
2010-08-01    0.2500
2010-08-01    0.6875
2010-08-01    0.6250
2010-08-01    0.9375
2010-08-01    0.7500
Name: percentile, dtype: float64
month=['2010-08-01','2010-08-01','2010-08-01','2010-08-01','2010-09-01']
org_code=[1847,1848,1849,1850,1847]
ratio_cost=[8.685939,7.883951,6.798465,7.352603,8.778501] 
df=pd.DataFrame({'month':month,'org_code':org_code,'ratio_cost':ratio_cost})

q_cutoff = df['ratio_cost'].quantile(0.95)
mask=df['ratio_cost'] < q_cutoff
trimmed_df=df[mask]

 print(trimmed_df)