2016-02-22 2 views
0

Я работаю с рамкой данных pandas. Я пытаюсь создать новый столбец, данные ['Labels'], который содержит метки, определяемые изменением значения между строкой i и строкой i + n в данных столбца ['diff'], для всей длины блока данных.python dataframe rows: если значение в строке + n> значение в строке, установите переменную в A

Я представляю себе что-то из следующего, однако это возвращает меня ошибки:

for i in range(len(data['diff'])-1): 
    data.loc[data['diff'][i] >= data['diff'][i+n], 'Labels'] = 'A' 
    data.loc[data['diff'][i] < data['diff'][i+n], 'Labels'] = 'B' 

пример вывода:

index diff label 
9  117.32 B 
10 108.32 A 
11 125.36 A 
12 127.36 A 
13 139.28 A 
14 141.22 A 
15 147.89 A 
16 153.89 B 
17 153.89 B 
18 156.87 B 
19 168.84 B 
20 161.04 B 
21 172.04 B 
24 175.16 B 
22 164.04 B 
23 164.16 B 
27 175.16 B 
25 149.16 A 
+1

вы можете просто сделать 'данных [«Labels»] = нп .where (data ['diff']> = data ['diff']. shift(), 'A', 'B') ' – EdChum

+0

Hi Ed, Спасибо! Это отлично работает для сравнения i и i + 1, однако я просто понял, что мне хотелось бы, чтобы сдвиг также включал возможность того, что данные ['diff'] [i]> = data ['diff] [i + n]. В принципе, я хочу создать ярлык в зависимости от изменений в любом месте в тайниках данных ['diff']. – wsp1morlet

+0

Изменение ваших требований - плохая форма для SO, также в вашем комментарии требуется дальнейшее объяснение: 'n' исправлено? или вы хотите сравнить 'i' с рядом строк? – EdChum

ответ

0

Если я правильно понимаю, вы хотите установить метку A если является более высоким значением в любой из следующих строк.

Максимальное значение оставшихся строк можно получить с помощью cummax. Тем не менее, вам нужно сначала вернуть индекс, иначе cummax вернет максимум из предыдущих строк. Вы можете сделать это с помощью .iloc[::-1]:

df['following_max'] = df['diff'].iloc[::-1].cummax().iloc[::-1] 

Затем нанесите метку A всякий раз, когда следующий максимум больше, чем текущее значение:

df['Labels'] = np.where(df['diff'] < df['following_max'], 'A', 'B') 

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

  • Нет связанных вопросов^_^