2015-10-01 3 views
2

У меня есть большой кадр данных с несколькими тысячами строк и несколькими сотнями столбцов. Каждая строка - это дата, и в каждом столбце у меня есть данные для этой даты. я буду делать меньший пример:Процентное ранжирование в кадре данных. Pandas

DATE A  B  C 
2012 73,5 27,2 19 
2013 19,5 22,2 33 
2014 33  40 19,56 

Я хочу, чтобы получить процентиль рейтинга для всех столбцов для заданной даты. Таким образом, каждый столбец будет иметь значение процентиля вместо его номера, где 95 процентиль означает, что значение находилось в верхних 5%. Например, в 2012 году будет иметь самый высокий рейтинг процентиль, но это было бы только где-то в середине в 2014 Я предполагаю там должен быть простой функцией, как pandas.percentile или pandas.rank

ответ

2

Вы могли бы разделить на максимум для каждый год:

In [11]: df1 = df.set_index("DATE") 

In [12]: df1 
Out[12]: 
     A  B  C 
DATE 
2012 73.5 27.2 19.00 
2013 19.5 22.2 33.00 
2014 33.0 40.0 19.56 

In [13]: df1.max(1) 
Out[13]: 
DATE 
2012 73.5 
2013 33.0 
2014 40.0 
dtype: float64 

In [14]: df1.div(df1.max(1), axis=0) 
Out[14]: 
      A   B   C 
DATE 
2012 1.000000 0.370068 0.258503 
2013 0.590909 0.672727 1.000000 
2014 0.825000 1.000000 0.489000 
+0

По какой-то причине я получаю ValueError из-за различной формы операндов. У меня есть 673 строки и 75 столбцов – AK9309

+0

Я думаю, что мне просто нужно настроить цикл, который будет брать каждую строку из фреймворка данных, и делить каждую запись на максимум этой строки. – AK9309

+0

. Аргументы оси max и div являются критическими , Также это будет работать только для числовых столбцов. Я думаю, что max отбросит остальных, следовательно, ValueError. Вы можете [select_dtypes] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.select_dtypes.html) перед выполнением max/div. –

Смежные вопросы