在熊猫DF中替换窗口

时间:2020-04-10 11:37:04

标签: python pandas replace window

我想替换等于给定列表的数据帧中连续行中的值,例如[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。

我希望有人能帮助我,我已经清楚地说明了我的问题。

2 个答案:

答案 0 :(得分:0)

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

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

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

df['B'] = list(string_a)

可能有一种更有效的方法。我对python很陌生

此致

豪尔赫

答案 1 :(得分:0)

我最终使用.shift()自己修复了它。如果前后移动它,然后两个移位版本中的1与0重叠,则可以用0替换该1以达到相同的结果。这不是一个好的解决方案,因为它通常不适用,但对我而言有效。