当列具有连续数字时,仅求和熊猫行连续

时间:2020-10-14 13:39:34

标签: python pandas

我有一个类似的数据框

pd.DataFrame({'i': [ 3,  4, 12, 25, 44, 45, 52, 53, 65, 66]
              , 't': range(1,11) 
              , 'v': range(0,100)[::10]}
            )

    i   t   v
0   3   1   0
1   4   2   10
2   12  3   20
3   25  4   30
4   44  5   40
5   45  6   50
6   52  7   60
7   53  8   70
8   65  9   80
9   66  10  90

如果v增加1,我想将i列中的值与下一列相加。 可以假设最多有两个连续的行要累加,因此最后一行可能是不明确的,具体取决于是否累加。

结果数据框应如下所示:

    i   t   v
0   3   1   10
2   12  3   20
3   25  4   30
4   44  5   90
6   52  7   130
8   65  9   170

很明显,我可以使用.iterrows()遍历数据帧,但是必须有一个更聪明的解决方案。 我尝试了shiftdiffgroupby的各种组合,尽管我看不出这样做的方法...

2 个答案:

答案 0 :(得分:2)

这是识别diff上带有cumsum的块的常见技术:

blocks = df['i'].diff().ne(1).cumsum()
df.groupby(blocks, as_index=False).agg({'i':'first','t':'first', 'v':'sum'})

输出:

    i  t    v
0   3  1   10
1  12  3   20
2  25  4   30
3  44  5   90
4  52  7  130
5  65  9  170

答案 1 :(得分:2)

让我们尝试

out = df.groupby(df['i'].diff().ne(1).cumsum()).agg({'i':'first','t':'first','v':'sum'})
Out[11]: 
    i  t    v
i            
1   3  1   10
2  12  3   20
3  25  4   30
4  44  5   90
5  52  7  130
6  65  9  170
相关问题