2014-08-30 2 views
1

У меня есть DataFrame с 2 столбцами. Мне нужно знать, в какой момент число вопросов увеличилось.Найти процентное изменение значений в серии

In [19]: status 
Out[19]: 
    seconds questions 
0 751479 9005591 
1 751539 9207129 
2 751599 9208994 
3 751659 9210429 
4 751719 9211944 
5 751779 9213287 
6 751839 9214916 
7 751899 9215924 
8 751959 9216676 
9 752019 9217533 

Мне нужно изменить процент столбцов «вопросов», а затем отсортировать его. Это не работает:

status.pct_change('questions').sort('questions').head() 

Любые предложения?

ответ

3

Попробуйте этот путь вместо этого:

>>> status['change'] = status.questions.pct_change() 
>>> status.sort_values('change', ascending=False) 

    questions seconds change 
0 9005591 751479  NaN 
1 9207129 751539 0.022379 
2 9208994 751599 0.000203 
6 9214916 751839 0.000177 
4 9211944 751719 0.000164 
3 9210429 751659 0.000156 
5 9213287 751779 0.000146 
7 9215924 751899 0.000109 
9 9217533 752019 0.000093 
8 9216676 751959 0.000082 

pct_change может быть выполнена на серии, а также DataFrames и принимает целочисленный аргумент для числа периодов, которые вы хотите, чтобы вычислить изменение над (по умолчанию 1).

Я также предположил, что вы хотите отсортировать по 'change' колонке с наибольшими процентными изменениями, показывая первый ...

+0

Это также можно получить абсолютное значение изменения? Например, первые 3 значения были бы NaN, 201538,1865 – shantanuo

+2

Конечно - одним из способов было бы создать новый столбец, сдвинув записи 'questions' на одну строку, установив статус ['q_shift'] = status ['questions «] .shift()'. Это изменение - это статус ['questions'] - status ['q_shift'] '. –

+0

Я также выяснил, что вы можете использовать 'status ['q_shift'] = status ['questions']. Diff()'. [Pandas.DataFrame.diff] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.diff.html). – rocarvaj