python - Pandas 用相邻的连续值替换少于 n 个连续值

标签 python pandas

假设我有以下 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 的组并将其替换为 ffillbfill

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/

相关文章:

python - 在Python中匹配2个数据框列的字符串

python - 将零值转换为 Pandas 中的空单元格

Python:执行 scp、stdin 密码不起作用

python - 如何在 numpy 中创建 3 维矩阵,如 matlab a(:, :, :)

python - Pandas reshape 数据

python - 条件 Group By 语句

python - 将 numpy 数组更改为 float

python - PyQt5 如何从 QProcess 读取/写入 QProcess

python - 如何解压缩迭代器?

python - 合并两列上的 DataFrame