熊猫用连续的行替换行值

时间:2020-09-14 15:26:41

标签: python pandas dataframe

我有一只熊猫DF:-

    start end   ent
        0   2   O
        3   6   O
        7   10  O
        11  17  ABC
        18  20  O
        21  24  O
        25  29  O
        30  32  O
        33  37  XYZ
        38  41  XYZ
        42  46  XYZ
        47  50  O
        51  55  O
        56  59  O
        60  64  O
        65  67  O
        68  72  O
        72  75  O
        76  79  O
        79  82  O
        82  85  O

目标是将行的“结束”值与行+1的“开始”值进行比较,如果它们相等,则以上结果将为:-

    start end   ent
        0   2   O
        3   6   O
        7   10  O
        11  17  ABC
        18  20  O
        21  24  O
        25  29  O
        30  32  O
        33  37  XYZ
        38  41  XYZ
        42  46  XYZ
        47  50  O
        51  55  O
        56  59  O
        60  64  O
        65  67  O
        68  75  O
        76  85  O

最后5行原始df已更改。

真的很感谢您的投入,谢谢。

1 个答案:

答案 0 :(得分:2)

要获取先前的值,我们可以使用shift()。识别这些块的常用技术是在cumsum处于否定条件的情况下,然后使用groupby:

mask = df['start'] != df['end'].shift()

df.groupby(mask.cumsum()).agg({'start':'first', 'end':'last', 'ent':'first'})

输出:

    start  end  ent
1       0    2    O
2       3    6    O
3       7   10    O
4      11   17  ABC
5      18   20    O
6      21   24    O
7      25   29    O
8      30   32    O
9      33   37  XYZ
10     38   41  XYZ
11     42   46  XYZ
12     47   50    O
13     51   55    O
14     56   59    O
15     60   64    O
16     65   67    O
17     68   75    O
18     76   85    O