Alexander Paul
Supongamos que tengo este datarame
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"])
Salida:
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
Quiero llenar el número de fecha que falta (éste se encuentra entre 0 y 3) con el recuento anterior basado en ID y el código. resultado previsto:
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
Quang Hoang:
En su caso, una combinación de pivot
y stack
:
(df.pivot_table(index=['id','code'],
columns='date',
values='count')
.reindex(np.arange(4), axis=1)
.ffill(1)
.stack()
.reset_index(name='count')
)
Salida:
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
Actualización : si tiene más de uno count
columnas, es un poco más complejo:
(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()
)