假设我有以下 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]}
目前我通过手动迭代来完成这项工作,我认为 pandas 有特殊的功能来做到这一点。
最佳答案
这有点棘手,请使用 diff() , cumsum()和 np.size找出组的大小。使用mask()查找小于 3 的组并将其替换为 ffill和 bfill
s = 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.]
关于python - Pandas 用相邻的连续值替换少于 n 个连续值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63316063/