使用条件移位获取上一行信息

时间:2018-08-10 09:26:16

标签: 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]

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

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

1 个答案:

答案 0 :(得分:1)

通过pd.Series.ffillNaN的值转换为df['pageflag'] = df['pageflag'].mask(df['pageflag'] == 0).ffill() 后,可以使用pd.Series.mask

{{1}}