Создайте новый столбец True/False Dataframe Pandas на основе условий

Год Округ Геометрия ИСТИНА/ЛОЖЬ 1900 г. 101 ПОЛИГОН ((-89,26355 41,32246, -89,26171 41,322... истинный 1902 г. 101 ПОЛИГОН ((-89,26355 41,33246, -89,26171 41,322... ЛОЖЬ

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

Я хочу сравнить столбец Geometry, который является типом данных GeometryArray, с таким же столбцом геометрии того же района двумя годами ранее.

Сформулировано как вопрос: Является ли геометрия района 101 в 1902 году такой же, как у района 101 в 1900 году? ИСТИНА/ЛОЖЬ

df['geometry change from last year'] = np.where(df['geometry'].at[df.index[i]]!= climate[geometry].at[df.index[i-2]], 'True', 'False')
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В зависимости от того, как на самом деле организован ваш rows, вы можете использовать eq вместе с сдвигом.

(частичный ответ от здесь)

Сначала создайте фиктивный фрейм данных:

import pandas as pd

data = {'Year':[1900,1901,1902],
        'District':[101,101,101],
        'Geometry':[
             'POLYGON ((-89.26355 41.32246, -89.26171 41.322))',
             'POLYGON ((-89.26355 41.33246, -89.26171 41.322))',
             'POLYGON ((-89.26255 41.33246, -89.26171 41.322))'],
        }

df = pd.DataFrame(data)
df

Фрейм данных выглядит так:

   Year  District                                          Geometry
0  1900       101  POLYGON ((-89.26355 41.32246, -89.26171 41.322))
1  1901       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))
2  1902       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))

Затем, объединив упомянутые функции:

df['changed'] = df['Geometry'].eq(df['Geometry'].shift(2).bfill().astype(bool)
df

выходы:

   Year  District                                          Geometry  changed
0  1900       101  POLYGON ((-89.26355 41.32246, -89.26171 41.322))    False
1  1901       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))     True
2  1902       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))     True

Хотя вам придется взглянуть на самые первые две строки из-за bfill(), необходимых для сравнения.

Спасибо, это определенно заставляет меня задуматься. Я предполагаю, что это просто не решает подход к сопоставлению индексов, на который я надеялся, потому что годы и районы не создают одинаковые номера строк, которые можно сдвинуть с заданным значением (т.е. 2 в этом случае).

SturgeonNW 24.11.2022 04:45

Я нашел простой способ сортировки строк, который как бы решает мой предыдущий комментарий (он по-прежнему потребует много ручной проверки, но когда я пробую предоставленный вами код: я получаю следующую ошибку: NotImplementedError: fillna с методом еще нет поддерживается

SturgeonNW 24.11.2022 04:49

похоже, ошибка возникает, поскольку есть какая-то проблема со сравнением GeometryArray. Я думаю, что нашел обходной путь, извлекая переменные широты и долготы центральной точки, и я могу запустить две версии приведенного выше кода для координат x и y, но когда я запускаю его, все результаты «Ложь».

SturgeonNW 24.11.2022 05:02

Я разобрался! Спасибо. Следуя ссылке на другой пост, которым вы поделились, у меня сработал подход с использованием .ne вместо .eq: df['ColumnB'].ne(df['ColumnB'].shift().bfill()).astype( bool) сработало для меня.

SturgeonNW 24.11.2022 05:12

Другие вопросы по теме