Pandas как заполнить последовательность строк предыдущим значением в фрейме данных - PullRequest
3 голосов
/ 17 марта 2020

Предположим, у меня есть этот набор данных

df =pd.DataFrame([[1, 1, 0, 3], [1, 1, 1, 4], [1, 1, 3, 6], [2, 1, 0, 0], [2, 1, 3, 6]],
             columns=["id","code","date","count"])

Вывод:

   id  code  date  count
0   1     1     0      3
1   1     1     1      4
2   1     1     3      6
3   2     1     0      0
4   2     1     3      6

Я хочу заполнить пропущенный номер даты (это от 0 до 3) предыдущим подсчетом на основе по идентификатору и коду. Предполагаемая мощность:

   id  code  date  count
0   1     1     0      3
1   1     1     1      4
2   1     1     2      4
3   1     1     3      6
4   2     1     0      0
5   2     1     1      0
6   2     1     2      0
7   2     1     3      6

1 Ответ

2 голосов
/ 17 марта 2020

В вашем случае комбинация pivot и stack:

(df.pivot_table(index=['id','code'],
               columns='date',
               values='count')
   .reindex(np.arange(4), axis=1)
   .ffill(1)
   .stack()
   .reset_index(name='count')
)

Вывод:

   id  code  date  count
0   1     1     0    3.0
1   1     1     1    4.0
2   1     1     2    4.0
3   1     1     3    6.0
4   2     1     0    0.0
5   2     1     1    0.0
6   2     1     2    0.0
7   2     1     3    6.0

Обновление : если у вас есть более одного count столбца, это немного сложнее:

(df.pivot_table(index=['id','code'],
               columns='date')
   .stack(level=0)
   .reindex(np.arange(4), axis=1)
   .ffill(1)
   .unstack(level=-1)
   .stack(level=0)
   .reset_index()
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...