我正在将 XML 转换为看起来像这样的数据框:
我希望为该页面中的所有文本框复制 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.mask
将 0
值转换为 NaN
后:
df['pageflag'] = df['pageflag'].mask(df['pageflag'] == 0).ffill()
关于python - 使用条件移位获取上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783267/