pandas - вычисление нового столбца из расчета по разным строкам - PullRequest
1 голос
/ 03 апреля 2020

С учетом pandas кадра данных, подобного следующему:

import pandas as pd

d = {'date': ['20200315', '20200314', '20200313'], 'units': [700, 500, 400]}
df = pd.DataFrame(data=d)
df
   date       units
0  20200315   700
1  20200314   500
2  20200313   400

Как я могу создать новый столбец - 'change' - где значение равно единицам сегодняшнего дня за вычетом единиц вчерашнего дня? Есть ли способ сделать это легко, кроме итерации по каждой строке и сохранения значений каждой единицы перед выполнением математики? Я хочу закончить с:

   date       units   change
0  20200315   700     200
1  20200314   500     100
2  20200313   400     0

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Вы можете отсортировать по дате, использовать прокрутку, затем применить разницу между значениями и, наконец, заполнить nan 0:

df['change'] = df.sort_values(by='date')['units'].rolling(2).apply(lambda x: x.iloc[1] - x.iloc[0]).fillna(0)
0 голосов
/ 04 апреля 2020

Я предполагаю, что даты уже упорядочены, и если это так, вы можете использовать метод diff :

 df['change'] = df.units.diff(-1).fillna(0)

     date      units    change
0   20200315    700     200.0
1   20200314    500     100.0
2   20200313    400     0.0
...