假设我有这个数据框
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
我想使用基于ID和代码的先前计数来填充缺少的日期数字(此数字介于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
答案 0 :(得分:2)
对于您而言,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()
)