猿问

熊猫用相邻的连续值替换少于 n 个连续值

假设我有以下 DataFrame df


df = pd.DataFrame({

"a" : [8,8,0,8,8,8,8,8,8,8,4,1,4,4,4,4,4,4,4,4,4,4,7,7,4,4,4,4,4,4,4,4,5,5,5,5,5,5,1,1,5,5,5,5,5,5,1,5,1,5,5,5,5]}

我想规范化我的数据,如果连续值少于 3 次,则将值更改为相邻的连续值。


result:   

 df = pd.DataFrame({

        "a" : [8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]}

目前我通过手动迭代来完成这项工作,我认为熊猫有特殊的功能来做到这一点。


隔江千里
浏览 108回答 2
2回答

慕仙森

这有点麻烦,使用diff()、cumsum()和np.size来查找组的大小。使用mask()查找小于 3 的组并将其替换为ffill和bfills = df.groupby((df['a'].diff() != 0).cumsum()).transform(np.size)df['a'] = df[['a']].mask(s < 3).ffill().bfill()#result[8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 8., 4., 4., 4., 4., 4.,   4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 4., 5., 5.,   5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5., 5.,   5., 5.]

墨色风雨

使用NumPy将是有用的:import numpy as npimport pandas as pddf = pd.DataFrame({"a" : [8,8,0,8,8,8,8,8,8,8,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4,1,4,4,4,4,4,4,4,4,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4,4,7,7,4,4,4,4,4,4,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4,4,5,5,5,5,5,5,1,1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5,5,5,5,5,5,1,5,4,5,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5,5,5]})arr = df.values.reshape(-1)sub = arr[1:]-arr[:-1]add2 = sub[1:]+sub[:-1]&nbsp;&nbsp;add3 = sub[2:]+sub[:-2]del2 = np.where((sub[1:]!=0) & (add2*sub[1:]==0))[0]+1del3 = np.where((sub[2:]!=0) & (add3*sub[2:]==0))[0]+1arr[del2] = arr[del2-1]arr[del3] = arr[del3-1]arr[del3+1] = arr[del3+2]df = pd.DataFrame({"a" : arr})print(arr)'''Output:[8 8 8 8 8 8 8 8 8 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5&nbsp;5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5]'''
随时随地看视频慕课网APP

相关分类

Python
我要回答