Pandas: groupe par la valeur de l'index, puis calculer les quantiles?

J'ai un DataFrame indexé sur le month colonne (défini à l'aide de df = df.set_index('month'), dans le cas où c'est pertinent):

             org_code  ratio_cost   
month
2010-08-01   1847      8.685939     
2010-08-01   1848      7.883951     
2010-08-01   1849      6.798465     
2010-08-01   1850      7.352603     
2010-09-01   1847      8.778501     

Je veux ajouter une nouvelle colonne intitulée quantile, qui attribuera un quantile de la valeur à chaque ligne, basée sur la valeur de ses ratio_cost pour ce mois.

Donc l'exemple ci-dessus pourrait ressembler à ceci:

             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

Comment puis-je faire cela? J'ai essayé ceci:

df['quantile'] = df.groupby('month')['ratio_cost'].rank(pct=True)

Mais je reçois KeyError: 'month'.

Mise à JOUR: je peux reproduire le bug.

Voici mon fichier CSV: http://pastebin.com/raw/6xbjvEL0

Et voici le code pour reproduire l'erreur:

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']

Je suis en utilisant les Pandas 0.17.1 sur OSX.

essayez df['quantile'] = df.groupby(df.index)['ratio_cost'].rank(pct=True) ou df['quantile'] = df.groupby(level=0)['ratio_cost'].rank(pct=True)
Merci. J'ai essayé tout à print df.groupby(level=0), mais il me donne raise ValueError. Même avec df.groupby(df.index).
Ah, le mois de la colonne est un datetime - est-ce un problème? J'ai mis à jour la question afin de montrer ce qu'il produit.
Merci, mais c'est ce que j'ai d'abord essayé, c'est dans la question...
C'est en fait la .rank() appel qui est à l'origine de l'erreur - voir mise à jour.

OriginalL'auteur Richard | 2016-01-28