69963


Pandasでデータの処理をしています。 A列がIDで、同じ数字が連続したり 、飛び飛びになっていたりします。  
A列の同じ数字はそのまま、飛んでいる数字の隙間を埋めるのに効果的な操作はあれば教えて頂けませんか？

[code]

        A   B   C   D   E   F
    1   1   0   0   0   4   1163.7
    2   1   0.8 0.8 2.2 0   0
    3   1   0.2 0.2 4.4 0   0
    4   1   0.8 0.4 0.4 0   0
    5   1   0.5 0.7 3.8 0   0
    6   2   1   1   8.9 0   0
    7   2   1.5 1.5 1.7 0   0
    8   2   2   2   8.7 0   0
    9   4   3   3   5.  0   0
    10  4   4.5 4.5 2.2 0   0
    11  4   6.0 6.5 0.8 0   0
    12  4   8   8   0.3 0   0
    13  4   5.3 0   0   1   116
    14  4   0   0   0   4   116
    15  13  0.8 0.8 1.1 0   0
    16  13  0.2 0.5 3.4 0   0
    17  13  0.4 0.8 3.2 0   0
    18  13  0.7 0.5 3.0 0   0
    19  15  1   1   1.5 0   0
    20  15  1.5 1.5 1.7 0   0
    21  15  2   2   7.9 0   0
    ・
    ・
    ・
    
[/code]

以下が目指すデータです

[code]

        A   B   C   D   E   F
    1   1   0   0   0   4   1163.7
    2   1   0.8 0.8 2.2 0   0
    3   1   0.2 0.2 4.4 0   0
    4   1   0.8 0.4 0.4 0   0
    5   1   0.5 0.7 3.8 0   0
    6   2   1   1   8.9 0   0
    7   2   1.5 1.5 1.7 0   0
    8   2   2   2   8.7 0   0
    9   3   3   3   5.  0   0
    10  3   4.5 4.5 2.2 0   0
    11  3   6.0 6.5 0.8 0   0
    12  3   8   8   0.3 0   0
    13  3   5.3 0   0   1   116
    14  3   0   0   0   4   116
    15  4   0.8 0.8 1.1 0   0
    16  4   0.2 0.5 3.4 0   0
    17  4   0.4 0.8 3.2 0   0
    18  4   0.7 0.5 3.0 0   0
    19  5   1   1   1.5 0   0
    20  5   1.5 1.5 1.7 0   0
    21  5   2   2   7.9 0   0
    ・
    ・
    ・
    
[/code]


CC BY-SA 4.0
2020-08-29T05:22:14.937
69962
2020-08-29T06:56:41.463
41680
question
python pandas
Pandasで、飛び飛びの列番号を連番にしたい。


問題としては
[ベクトルの欠番を詰めて欠番が無いように要素を置換する方法(R言語)](https://ja.stackoverflow.com/questions/53922/)
と同じかと思います。この質問に対する回答に `cumsum()` を使用したものがあり、pandas でも同様に
[pandas.DataFrame.cumsum](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.cumsum.html) を使う事ができます。

[code]

    import pandas as pd
    
    df = pd.DataFrame({
      'A': [1,1,1,1,1,2,2,2,4,4,4,4,4,4,13,13,13,13,15,15,15],
      'B': [0,0.8,0.2,0.8,0.5,1,1.5,2,3,4.5,6.0,8,5.3,0,0.8,0.2,0.4,0.7,1,1.5,2],
      'C': [0,0.8,0.2,0.4,0.7,1,1.5,2,3,4.5,6.5,8,0,0,0.8,0.5,0.8,0.5,1,1.5,2],
      'D': [0,2.2,4.4,0.4,3.8,8.9,1.7,8.7,5.0,2.2,0.8,0.3,0,0,1.1,3.4,3.2,3.0,1.5,1.7,7.9],
      'E': [4,0,0,0,0,0,0,0,0,0,0,0,1,4,0,0,0,0,0,0,0],
      'F': [1163.7,0,0,0,0,0,0,0,0,0,0,0,116,116,0,0,0,0,0,0,0],
    })
    
    df.A = df.A.ne(df.A.shift()).cumsum()
    print(df)
    
        A    B    C    D  E       F
    0   1  0.0  0.0  0.0  4  1163.7
    1   1  0.8  0.8  2.2  0     0.0
    2   1  0.2  0.2  4.4  0     0.0
    3   1  0.8  0.4  0.4  0     0.0
    4   1  0.5  0.7  3.8  0     0.0
    5   2  1.0  1.0  8.9  0     0.0
    6   2  1.5  1.5  1.7  0     0.0
    7   2  2.0  2.0  8.7  0     0.0
    8   3  3.0  3.0  5.0  0     0.0
    9   3  4.5  4.5  2.2  0     0.0
    10  3  6.0  6.5  0.8  0     0.0
    11  3  8.0  8.0  0.3  0     0.0
    12  3  5.3  0.0  0.0  1   116.0
    13  3  0.0  0.0  0.0  4   116.0
    14  4  0.8  0.8  1.1  0     0.0
    15  4  0.2  0.5  3.4  0     0.0
    16  4  0.4  0.8  3.2  0     0.0
    17  4  0.7  0.5  3.0  0     0.0
    18  5  1.0  1.0  1.5  0     0.0
    19  5  1.5  1.5  1.7  0     0.0
    20  5  2.0  2.0  7.9  0     0.0
    
[/code]


CC BY-SA 4.0
2020-08-29T06:56:41.463
69963
2020-08-29T06:56:41.463
69962
answer