python - 使用条件移位获取上一行

标签 python python-3.x pandas numpy dataframe

我正在将 XML 转换为看起来像这样的数据框:

enter image description here

我希望为该页面中的所有文本框复制 pageflag 列中的页码标记,在本例中,将第 1 行中的 pageflag 值复制到第 9,10 和 11 行

为此,我使用 Dataframe.shift 使用类似这样的条件:

df['pageflag'] = np.where(df['pageflag']==0,df['pageflag'].shift(1),df['pageflag'])

应该基于此条件,以避免已经具有值的行发生移位,例如本例中第 13 行出现了新的页面属性。

我面临的问题是,移位仅发生在页码标记之后的一行,在我的例子中是第 9 行。第 10 行和第 11 行的值仍然为零,这不是我所期望的。

这可以使用 for 循环来实现,如下所示:

for i in range(1, len(df)):
    if df['pageflag'][i] == 0:
        df['pageflag'][i] = df['pageflag'][i - 1]
    else:
        df['pageflag'][i] = df['pageflag'][i]

但由于大型数据帧的性能问题,这是我想避免的事情。

关于如何以最有效的方式实现这一目标有什么建议吗?

最佳答案

您可以使用pd.Series.ffill通过 pd.Series.mask0 值转换为 NaN 后:

df['pageflag'] = df['pageflag'].mask(df['pageflag'] == 0).ffill()

关于python - 使用条件移位获取上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783267/

相关文章:

python - 当列名以数字开头时,Pandas 查询会抛出错误

python - Python 中的列表和元组有什么区别?

Python Pandas fillna()

python - 从 Pandas 中的列生成对

python - 如何仅使用其扩展名打开文件?

python - 从字符串中去除\x00 和\x02

python-3.x - 如何将不同列的 value_count() 值打印在一起?

python - 属性错误 : 'Client' object has no attribute 'send_message' (Discord Bot)

python - 最后一次出现正回溯

python - 这里的ret和frame是什么意思?