df = pd.DataFrame({"a" : [1,2,3,4,5,5],"b" : [3,6,7,7],"c" : [4,1,3]})
而且我希望替换连续重复10次以上任意列(可能有数百列)的4号,其中10 4个,其余5个.
因此,例如,12个连续4个将被替换为10个4和2个5.
我如何用熊猫实现这一目标?
我想应用一个lambda,但我不知道如何回顾足够的行,它必须从最后开始并向前移动,否则会破坏值的序列.每次查找都必须查看前面的10行,看它们是否都等于4,如果是,则将当前值设置为5.
不知道如何去做!
解决方法 您可以使用:#column a is changed for 2 groups of 4df = pd.DataFrame({"a" : [4,3]})
如果由where
创建NaN,则解决方案将连续4次重置为计数,然后在mask
之前将布尔掩码应用于原始df以替换4到5:
a = df == 4mask = a.cumsum()-a.cumsum().where(~a).ffill().fillna(0) > 10df1 = df.mask(mask,5)
print (df1) a b c0 4 3 41 4 3 42 4 3 43 4 3 44 4 3 45 4 3 46 4 3 47 4 4 48 4 4 49 4 4 410 5 4 511 5 5 512 5 5 513 5 5 514 7 5 515 4 5 516 4 5 517 4 5 518 4 5 519 4 5 520 4 5 521 4 5 122 4 5 223 4 5 224 4 5 225 5 5 226 5 5 227 5 5 228 5 6 229 5 6 230 5 7 331 5 7 3
为了更好地检查值,可以使用concat:
print (pd.concat([df,df1],axis=1,keys=['orig','new'])) orig new a b c a b c0 4 3 4 4 3 41 4 3 4 4 3 42 4 3 4 4 3 43 4 3 4 4 3 44 4 3 4 4 3 45 4 3 4 4 3 46 4 3 4 4 3 47 4 4 4 4 4 48 4 4 4 4 4 49 4 4 4 4 4 410 4 4 4 5 4 511 4 5 4 5 5 512 4 5 4 5 5 513 4 5 4 5 5 514 7 5 4 7 5 515 4 5 4 4 5 516 4 5 4 4 5 517 4 5 4 4 5 518 4 5 5 4 5 519 4 5 5 4 5 520 4 5 5 4 5 521 4 5 1 4 5 122 4 5 2 4 5 223 4 5 2 4 5 224 4 5 2 4 5 225 4 5 2 5 5 226 4 5 2 5 5 227 4 5 2 5 5 228 4 6 2 5 6 229 5 6 2 5 6 230 5 7 3 5 7 331 5 7 3 5 7 3总结
以上是内存溢出为你收集整理的python – 在Pandas DataFrame列中替换n个连续值全部内容,希望文章能够帮你解决python – 在Pandas DataFrame列中替换n个连续值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)