我想替换等于给定列表的数据帧中连续行中的值,例如[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。
我希望有人能帮助我,我已经清楚地说明了我的问题。
答案 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以达到相同的结果。这不是一个好的解决方案,因为它通常不适用,但对我而言有效。