2014-10-21 8 views
5

Ho un frame di dati con una colonna contenente Investment che rappresenta l'importo investito da un commerciante. Vorrei creare 2 nuove colonne nel frame di dati; uno che dà un grado decimale e l'altro un grado quintile basato sulla dimensione Investment. Voglio che 1 rappresenti il ​​decile con gli Investimenti maggiori e 10 che rappresenta il più piccolo. Con simpatia, voglio 1 rappresentare il quintile con i maggiori investimenti e 5 rappresenta il più piccolo.Come creare una colonna Decile e Quintile per classificare un'altra variabile in base alle dimensioni usando Python, Pandas?

Sono nuovo di Panda, quindi c'è un modo per farlo facilmente? Grazie!

risposta

8

La funzionalità che stai cercando è in pandas.qcuthttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.qcut.html

In [51]: import numpy as np 

In [52]: import pandas as pd 

In [53]: investment_df = pd.DataFrame(np.arange(10), columns=['investment']) 

In [54]: investment_df['decile'] = pd.qcut(investment_df['investment'], 10, labels=False) 

In [55]: investment_df['quintile'] = pd.qcut(investment_df['investment'], 5, labels=False) 

In [56]: investment_df 
Out[56]: 
    investment decile quintile 
0   0  0   0 
1   1  1   0 
2   2  2   1 
3   3  3   1 
4   4  4   2 
5   5  5   2 
6   6  6   3 
7   7  7   3 
8   8  8   4 
9   9  9   4 

E 'non standard per etichettare il più grande percentile con il minor numero, ma si può fare questo

In [60]: investment_df['quintile'] = pd.qcut(investment_df['investment'], 5, labels=np.arange(5, 0, -1)) 

In [61]: investment_df['decile'] = pd.qcut(investment_df['investment'], 10, labels=np.arange(10, 0, -1)) 

In [62]: investment_df 
Out[62]: 
    investment decile quintile 
0   0  10  5 
1   1  9  5 
2   2  8  4 
3   3  7  4 
4   4  6  3 
5   5  5  3 
6   6  4  2 
7   7  3  2 
8   8  2  1 
9   9  1  1 
+0

Grazie @ Dan quest'ultimo era quello che stavo cercando e ha funzionato bene! Leggerò di più sullo strumento qcut, è davvero utile! Grazie ancora :) – roland

Problemi correlati