У меня есть DataFrame
из pandas:
import pandas as pd
inp = [{'Name': 'John', 'Year':2018, 'Address':'Beverly hills'}, {'Name': 'John', 'Year':2018, 'Address':'Beverly hills'}, {'Name': 'John', 'Year':2019, 'Address':'Beverly hills'}, {'Name': 'John', 'Year':2019, 'Address':'Orange county'}, {'Name': 'John', 'Year':2019, 'Address':'New York'}, {'Name': 'Steve', 'Year':2018, 'Address':'Canada'}, {'Name': 'Steve', 'Year':2019, 'Address':'Canada'}, {'Name': 'Steve', 'Year':2019, 'Address':'Canada'}, {'Name': 'Steve', 'Year':2020, 'Address':'California'}, {'Name': 'Steve', 'Year':2020, 'Address':'Canada'}]
df = pd.DataFrame(inp)
print (df)
Если по сравнению с предыдущей строкой происходит изменение строкового значения строки, я хочу идентифицировать его в отдельной строке "Cng-Address" ", и если значение строки numberri c изменится, укажите его в столбце" Cng-Year ". Если нет изменений, определите его как ноль.
Индекс - «Имя», означающее, что вышеуказанные вычисления должны быть выполнены для всех строк, связанных с именем человека. Если «Имя» меняется (например, от Джона к Стиву), тогда вычисления для «Cng-Address» и «Cng-Year» должны быть сброшены. Год столбца отсортирован по возрастанию.
В качестве окончательного отчета я хочу получить:
- Джон изменил время года «1» и изменил местоположение «2» раза
- Стив измененные годы «2» раза и места смены «2» раза
- Общее количество измененных адресов за 2019 год - «2» раза
Текущий выход:
+-------+------+---------------+
| Name | Year | Address |
+-------+------+---------------+
| John | 2018 | Beverly hills |
+-------+------+---------------+
| John | 2018 | Beverly hills |
+-------+------+---------------+
| John | 2019 | Beverly hills |
+-------+------+---------------+
| John | 2019 | Orange county |
+-------+------+---------------+
| John | 2019 | New York |
+-------+------+---------------+
| Steve | 2018 | Canada |
+-------+------+---------------+
| Steve | 2019 | Canada |
+-------+------+---------------+
| Steve | 2019 | Canada |
+-------+------+---------------+
| Steve | 2020 | California |
+-------+------+---------------+
| Steve | 2020 | Canada |
+-------+------+---------------+
Идеальный выход:
+-------+------+---------------+----------+-------------+
| Name | Year | Address | Cng-Year | Cng-Address |
+-------+------+---------------+----------+-------------+
| John | 2018 | Beverly hills | 0 | 0 |
+-------+------+---------------+----------+-------------+
| John | 2018 | Beverly hills | 0 | 0 |
+-------+------+---------------+----------+-------------+
| John | 2019 | Beverly hills | 1 | 0 |
+-------+------+---------------+----------+-------------+
| John | 2019 | Orange county | 0 | 1 |
+-------+------+---------------+----------+-------------+
| John | 2019 | New York | 0 | 1 |
+-------+------+---------------+----------+-------------+
| Steve | 2018 | Canada | 0 | 0 |
+-------+------+---------------+----------+-------------+
| Steve | 2019 | Canada | 1 | 0 |
+-------+------+---------------+----------+-------------+
| Steve | 2019 | Canada | 0 | 0 |
+-------+------+---------------+----------+-------------+
| Steve | 2020 | California | 1 | 1 |
+-------+------+---------------+----------+-------------+
| Steve | 2020 | Canada | 0 | 1 |
+-------+------+---------------+----------+-------------+