首页 > 解决方案 > 熊猫数据框插入缺少的行并填充上一行

问题描述

我有一个数据框如下:

import pandas as pd
import numpy as np

df=pd.DataFrame({'id':[0,1,2,4,5],
                'A':[0,1,0,1,0],
                'B':[None,None,1,None,None]})
   id  A    B
0   0  0  NaN
1   1  1  NaN
2   2  0  1.0
3   4  1  NaN
4   5  0  NaN

请注意,列中的绝大多数值BNaN

idid列递增 1,因此缺少 2 到 4之间的一行。
需要插入的缺失行与前一行相同,除了id列。

所以例如结果是

    id  A   B
0   0   0.0 NaN
1   1   1.0 NaN
2   2   0.0 1.0
3   3   0.0 1.0 <-add row here
4   4   1.0 NaN
5   5   0.0 NaN

我可以在A列上执行此操作,但我不知道如何处理B列,因为将在行ffill填充,这是不正确的1.045

step=1
idx=np.arange(df['id'].min(), df['id'].max() + step, step)
df=df.set_index('id').reindex(idx).reset_index()
df['A']=df["A"].ffill()

编辑:
对不起,我忘记了一个问题。
B列将具有不同的值。
当DataFrame如下:

   id  A    B
0   0  0  NaN
1   1  1  NaN
2   2  0  1.0
3   4  1  NaN
4   5  0  NaN
5   6  1  2.0
6   9  0  NaN
7   10 1  NaN

结果将是:

   id  A    B
0   0  0  NaN
1   1  1  NaN
2   2  0  1.0
3   3  0  1.0
4   4  1  NaN
5   5  0  NaN
6   6  1  2.0
7   7  1  2.0
8   8  1  2.0
9   9  0  NaN
10  10 1  NaN

标签: pythonpandasnumpydataframe

解决方案


更改是否保留原始 id ,并使用update isin

s=df.id.copy() #change 1
step=1
idx=np.arange(df['id'].min(), df['id'].max() + step, step)
df=df.set_index('id').reindex(idx).reset_index()
df['A']=df["A"].ffill()

df.B.update(df.B.ffill().mask(df.id.isin(s))) # change two
df
   id    A    B
0   0  0.0  NaN
1   1  1.0  NaN
2   2  0.0  1.0
3   3  0.0  1.0
4   4  1.0  NaN
5   5  0.0  NaN

推荐阅读