Pandas最大正负连续行之和

qoefvg9y  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(84)

我有一个 Dataframe df如下:

# Import pandas library
import pandas as pd
 
# initialize list elements
data = [10,-20,30,40,-50,60,12,-12,11,1,90,-20,-10,-5,-4]
 
# Create the pandas DataFrame with column name is provided explicitly
df = pd.DataFrame(data, columns=['Numbers'])
 
# print dataframe.
df

我想要最大连续正数和负数的计数之和。
我能够得到最大concutive的正数和负数的计数,但无法使用下面的代码求和。
我的代码:

streak = df['Numbers'].to_list()
from collections import defaultdict
from itertools import groupby
counter = defaultdict(list)
for key, val in groupby(streak, lambda ele: "plus" if ele >= 0 else "minus"):
    counter[key].append(len(list(val)))
lst = []
for key in ('plus', 'minus'):
    lst.append(counter[key])
print("Max Pos Count " + str(max(lst[0])))
print("Max Neg Count : " + str(max(lst[1])))

电流输出:

Max Pos Count 3
Max Neg Count : 4

我正在努力求出最大连续正负之和。
预期输出:

Sum Pos Max Consecutive: 102
Sum Neg Max Consecutive: -39
c0vxltue

c0vxltue1#

逻辑不清楚,我的理解是:

  • 按连续负/正值分组
  • 获得每组最长的拉伸
  • 计算总和

您可以用途:

m = df['Numbers'].gt(0).map({True: 'positive', False: 'negative'})
df2 = df.groupby([m, m.ne(m.shift()).cumsum()])['Numbers'].agg(['count', 'sum'])
out = df2.loc[df2.groupby(level=0)['count'].idxmax(), 'sum'].droplevel(1)

输出:

Numbers
negative    -39
positive    102
Name: sum, dtype: int64

中间体df2

count  sum
Numbers  Numbers            
negative 2            1  -20
         4            1  -50
         6            1  -12
         8            4  -39 # longest negative stretch 
positive 1            1   10
         3            2   70
         5            2   72
         7            3  102 # longest positive stretch

相关问题