Попробуйте, и если результаты не являются желаемыми, пожалуйста, измените текущий вопрос, чтобы включить эти случаи в соответствие с желаемым результатом.
import pandas as pd #import library
# i am assuming that your dataframe name is df
df = pd.DataFrame({'EGID':['1', '1', '1', '1', '2', '2', '3', '3', '3', '3'],
'Start_date':['2019-01-01', '2019-06-05', '2019-08-01', '2019-02-11', '2019-02-11',
'2019-08-01', '2019-01-01', '2019-06-05', '2019-08-01', '2019-09-31'],
'End_Date':['2019-05-28', '2019-07-31', '2019-09-31', '2019-04-14', '2019-04-14',
'2019-09-31', '2019-05-28', '2019-07-31', '2019-09-31', '2019-12-31'],
'Consumption':[30, 40, 40, 60, 60, 40, 30, 40, 40, 50],
'Number_day':[152, 60, 0, 60, 60, 200, 200, 150, 60, 60]})
def counter_limits(x, lower_limit = 0, upper_limit=350):
"""
Function that takes a list or pandas series and returns a list integers that increment
when cumulative sum is reached or the element is the lower limit
"""
result = []
cummulative = 0
counter = 0
prev_el = -1
for el in x:
cummulative += el
if (cummulative > upper_limit) or (el == lower_limit) or (prev_el == lower_limit):
counter += 1
cummulative = 0
result.append(counter)
else:
result.append(counter)
prev_el = el
return result
df['key'] = df.groupby(['EGID'])['Number_day'].transform(counter_limits)
df2 = pd.concat([
df.groupby(['EGID', 'key'])[['Start_date', 'End_Date']].last(),
df.groupby(['EGID', 'key'])[['Consumption', 'Number_day']].sum()
], axis=1).reset_index().drop(columns='key')
df2