首页 > 解决方案 > 替换 Pandas DF 中的窗口

问题描述

我想替换数据框中等于给定列表的连续行中的值,例如[0, 1, 0]必须用零替换。因此,例如,如果这将应用于 A 列,则 B 列将是所需的结果:

   A  B
0  2  2
1  1  1
2  0  0
3  1  0
4  0  0
5  4  4

这里第 2、3 和 4 行与模板匹配,因此它们的值更改为 0。

在实践中,我想用随着时间的推移测量列来做到这一点。我想用 3 个或更少的连续测量值替换所有部分(因为它们“太短”)。因此,这些测量值是 1、2 或 3 行,两边各填充一行,值为 0。

例如,我已经尝试了很多,df['A'].replace([0, 1, 0], 0)但这显然用 0 替换了任何 0 或 1。这就是我现在想要的;只有与 [0, 1, 0] 模板匹配的部分才应替换为 0。

我希望有人可以帮助我,并且我已经清楚地解释了我的问题。

标签: pythonpandasreplacewindow

解决方案


一种方法是将列转换为字符串,然后捕获并将 '010' 替换为 '000',如下所示:

string_a = df['A'].astype(str).str.cat().replace('010', '000')

然后将其转换回列表并将其分配为 B 列:

df['B'] = list(string_a)

可能有一种更有效的方法来做到这一点。我对python很陌生

问候,

乔治


推荐阅读