熊猫-连续的groupby int

时间:2020-07-30 14:40:56

标签: python pandas

所以我有一个看起来像这样的df:

template <typename type>
std::ostream& operator << (type data) {
    return ((*stream) << data);
}
template <typename type>
std::istream& operator >> (type &data) {
    return ((*stream) >> data);
}

因此,我想对那些彼此之间仅相差1的元素执行groupby操作。假设我要对some_int(差异为1)进行分组,然后对another_int执行求和,这样我将得到类似的内容:

   some_int   another_int
0      1           5
1      2           6  
2      10          7
3      11          8
4      15          9
   some_int   another_int
0      1           5
1      2           6  
2      10          7
3      11          8
4      15          9

最好的pythonic方法是什么?我尝试创建一个差异蒙版,然后将其移位并执行或在其中执行。但是,它似乎有点冗长。你觉得呢?

1 个答案:

答案 0 :(得分:0)

我建议创建一个名为group的新列

df['group'] = (df.some_int.diff() > 1).cumsum()

然后,您可以groupby此列并应用一个自定义函数,该函数返回another_int的总和或some_int中的单个值:

def sum_or_val(x):
    print(len(x))
    if len(x) > 1:
        return sum(x['another_int'])
    return x['some_int'].values[0]
grouped = df.groupby('group').apply(sum_or_val)