python - Pandas 数据框插入缺失的行并填充上一行

标签 python pandas numpy dataframe

我有一个如下的数据框:

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
请注意,B 中的绝大多数值列是 NaNid列递增 1,因此 id 之间的一行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.0在行 45 ,这是不正确的
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

最佳答案

更改是否保留原始 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

关于python - Pandas 数据框插入缺失的行并填充上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62688778/

相关文章:

python - 如何仅在 pandas 中将列数据添加到第一行或为新列条目提供默认数据?

python - 替换python pandas数据框中的某个值

python - 将数据放在特定形状的列表中

python - 遍历图中所有边的算法

python - 将数据框转换为具有多个值的字典

python - Django 模型中没有这样的列错误

python - 在小块中创建非常大的 NUMPY 数组(PyTables 与 numpy.memmap)

python - 为什么使用逻辑 sigmoid 的 tanh 定义比 scipy 的 expit 更快?

python - 在 Python 3 中转换为不同的位置符号

python - Pandas - 更改日期列中的每个日期