python – 在Pandas DataFrame列中替换n个连续值
发布时间:2020-12-20 11:58:44 所属栏目:Python 来源:网络整理
导读:假设我有以下DataFrame df 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. 我如何用熊猫实现这一目
假设我有以下DataFrame df
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 4 df = pd.DataFrame({ "a" : [4,3]}) 如果由 a = df == 4 mask = a.cumsum()-a.cumsum().where(~a).ffill().fillna(0) > 10 df1 = df.mask(mask,5) print (df1) a b c 0 4 3 4 1 4 3 4 2 4 3 4 3 4 3 4 4 4 3 4 5 4 3 4 6 4 3 4 7 4 4 4 8 4 4 4 9 4 4 4 10 5 4 5 11 5 5 5 12 5 5 5 13 5 5 5 14 7 5 5 15 4 5 5 16 4 5 5 17 4 5 5 18 4 5 5 19 4 5 5 20 4 5 5 21 4 5 1 22 4 5 2 23 4 5 2 24 4 5 2 25 5 5 2 26 5 5 2 27 5 5 2 28 5 6 2 29 5 6 2 30 5 7 3 31 5 7 3 为了更好地检查值,可以使用concat: print (pd.concat([df,df1],axis=1,keys=['orig','new'])) orig new a b c a b c 0 4 3 4 4 3 4 1 4 3 4 4 3 4 2 4 3 4 4 3 4 3 4 3 4 4 3 4 4 4 3 4 4 3 4 5 4 3 4 4 3 4 6 4 3 4 4 3 4 7 4 4 4 4 4 4 8 4 4 4 4 4 4 9 4 4 4 4 4 4 10 4 4 4 5 4 5 11 4 5 4 5 5 5 12 4 5 4 5 5 5 13 4 5 4 5 5 5 14 7 5 4 7 5 5 15 4 5 4 4 5 5 16 4 5 4 4 5 5 17 4 5 4 4 5 5 18 4 5 5 4 5 5 19 4 5 5 4 5 5 20 4 5 5 4 5 5 21 4 5 1 4 5 1 22 4 5 2 4 5 2 23 4 5 2 4 5 2 24 4 5 2 4 5 2 25 4 5 2 5 5 2 26 4 5 2 5 5 2 27 4 5 2 5 5 2 28 4 6 2 5 6 2 29 5 6 2 5 6 2 30 5 7 3 5 7 3 31 5 7 3 5 7 3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |