У меня есть датафрейм, df, и я хочу добавить инкрементный идентификационный номер в новый столбец на основе текущей и предыдущей строки другого столбца.

data = [{'X': 6, 'Y': 1}, {'X': 6, 'Y': 1}, {'X': 7, 'Y': 0}, {'X': 7, 'Y': 0},
        {'X': 6, 'Y': 1}, {'X': 7, 'Y': 1}, {'X': 7, 'Y': 0}, {'X': 7, 'Y': 1} ] 

df = pd.DataFrame(data)

Теперь это условие,

Если Текущий X = Предыдущий X & Текущий Y <> Предыдущий Y,

Тогда ID_Number = Новый увеличенный номер

ИЛИ

Если Текущий X <> Предыдущий X & Текущий Y = Предыдущий Y,

Тогда ID_Number = Новый увеличенный номер

ИЛИ

Если Текущий X = Предыдущий X и Текущий Y = Предыдущий Y,

Тогда ID_Number = То же, что и предыдущий ID_Number

ИЛИ

Если Текущий X <> Предыдущий X & Текущий Y <> Предыдущий Y,

Тогда ID_Number = Новый увеличенный номер

Входной Dataframe будет выглядеть так

введите описание изображения здесь

Мое ожидание Выход это

введите описание изображения здесь

-3
blackmamba 20 Дек 2019 в 18:37
Добро пожаловать в Stack Overflow, попробуйте отформатировать свой вопрос более четко.
 – 
Sam Maule
20 Дек 2019 в 18:55
Вы смотрели Объединить? Если не null, то примет первое значение, иначе будет возвращено второе значение.
 – 
blackmamba
20 Дек 2019 в 18:58

1 ответ

Посмотрите этот фрагмент, не забудьте обработать первый элемент. скопируйте пасту из ipython.

In [10]: id_ =1  
In [11]: for first, second in zip(data, data[1:]): 
    ...:     if first != second: 
    ...:         id_ += 1 
    ...:     print(f'{id_} {second}') 
    ...:      
    ...:                              

Смотрите модуль itertools для более подробной информации.

0
cgte 20 Дек 2019 в 19:52
Хуанг, потому что MyQuery требует объекта Articles. pageSlug - это объект trix-editor. Итак, я преобразовал объект @trix-attachment-remove="handleAttachmentRemove" в объект @trix-attachment-add. Если он ответил на ваш вопрос, вы можете принять ответ, нажав √.
 – 
blackmamba
21 Дек 2019 в 05:12
Класс MockData:
 – 
cgte
22 Дек 2019 в 17:30