所以我有一个看起来像这样的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方法是什么?我尝试创建一个差异蒙版,然后将其移位并执行或在其中执行。但是,它似乎有点冗长。你觉得呢?
答案 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)