Как рассчитать изменение строки строки по сравнению с предыдущей строкой в ​​кадре данных? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть DataFrame in pandas:

import pandas as pd
inp = [{'Name': 'John', 'Year':2018, 'Address':'112, Beverly hills, California, US'}, {'Name': 'Steve', 'Year':2018, 'Address':'220, Bolvard ave, NY, US'}, {'Name': 'Steve', 'Year':2019, 'Address':'Kilroy street, 5512, Toronto, Canada'}, {'Name': 'John', 'Year':2018, 'Address':'112, Beverly hills, California, US'}, {'Name': 'John', 'Year':2019, 'Address':'112, Beverly hills, California, US'}, {'Name': 'Steve', 'Year':2019, 'Address':'Kilroy street, 5512, Toronto, Canada'}, {'Name': 'John', 'Year':2019, 'Address':'Orange county, California, US'}, {'Name': 'Steve', 'Year':2019, 'Address':'Kilroy street, 5512, Toronto, Canada'}, {'Name': 'John', 'Year':2019, 'Address':'240, Manhattan, NY, US'}, {'Name': 'Kim', 'Year':2019, 'Address':'Kilroy street, 5512, Toronto, Canada'}, {'Name': 'Kim', 'Year':2019, 'Address':'112, Beverly hills, California, US'}, {'Name': 'Kim', 'Year':2019, 'Address':'220, Bolvard ave, NY, US'}]
df = pd.DataFrame(inp)
print (df)

Токовый выход:

+-------+------+---------------------------------------------+
| Name  | Year | Address                                     |
+-------+------+---------------------------------------------+
| John  | 2018 | 112, Beverly hills,CA, 2645 California, US  |
+-------+------+---------------------------------------------+
| Steve | 2018 | 220, Bolvard ave, NY, USA                   |
+-------+------+---------------------------------------------+
| Steve | 2019 | Kilroy street, Toronto,5512, TO, Canada     |
+-------+------+---------------------------------------------+
| John  | 2018 | Beverly hills, California, US               |
+-------+------+---------------------------------------------+
| John  | 2019 | 112, Beverly hills, California, CA, USA     |
+-------+------+---------------------------------------------+
| Steve | 2019 | Kilroy street, 5512, Toronto,Canada         |
+-------+------+---------------------------------------------+
| John  | 2019 | Orange county, California, US               |
+-------+------+---------------------------------------------+
| Steve | 2019 | Kilroy street, 5512, Toronto,Canada         |
+-------+------+---------------------------------------------+
| John  | 2019 | 240, Manhattan, NY, NY, US                  |
+-------+------+---------------------------------------------+
| Kim   | 2019 | Kilroy street, 5512, Toronto, TO, Canada    |
+-------+------+---------------------------------------------+
| Kim   | 2019 | 112, Beverly hills, California, 2525 CA, US |
+-------+------+---------------------------------------------+
| Kim   | 2019 | 220, Bolvard ave, NY, 6545NY, USA           |
+-------+------+---------------------------------------------+

Мне нужен отчет о количество мобильностей из все имена между определенный адрес в конкретный c год .

Примечания:

  • Несмотря на то, что поле адреса представляет собой длинную строку, в отчете следует учитывать количество определенных изменений символов (например, от Калифорнии до Нью-Йорка) в поле адреса.
  • Число для мобильности означает, что символ в поле адреса (т. е. Калифорния) меняется на другой определенный символ в поле адреса (т. е. Нью-Йорк) либо в том же году, либо в следующем году (т. е. все изменения в 2019 или 2018–2019 гг.).

Два идеальных выхода :

1) Матрица, как показано ниже для каждого года.

Пример: Год 2019 (все изменения для определенной c заголовка столбца символов (например, в Нью-Йорке) в 2019 или 2018–2019 гг.).

+------------+------------+----+---------+
| From\ To   | California | NY | Toronto |
+------------+------------+----+---------+
| California | 0          | 2  | 0       |
+------------+------------+----+---------+
| NY         | 0          | 0  | 1       |
+------------+------------+----+---------+
| Totonto    | 1          | 0  | 0       |
+------------+------------+----+---------+

И

2) Изменение адреса для всех лет.

* 1 044 *

* Обратите внимание, что мой фактический размер кадра данных составляет 350 миллионов строк (12 ГБ), поэтому решение лучше использовать с меньшим объемом памяти.

...