熊猫如何用数据框中的前一个值填充行序列

时间:2020-03-17 02:45:00

标签: python pandas dataframe

假设我有这个数据框

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

1 个答案:

答案 0 :(得分:2)

对于您而言,pivotstack的组合:

(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()
)