Как получить максимальное значение между определенным индексом столбца панд? - PullRequest
2 голосов
/ 20 марта 2019

У меня есть датафрейм с индексом даты и пулом положительных и отрицательных значений

values = [1,2,3,4,-1,-2,-3,10,11,12]
start_date = pd.to_datetime('2019-01-23')
dates = [start_date + datetime.timedelta(days=i) for i in range(0,len(values))]
df = pd.DataFrame(values)
df.columns = ['values'] ; df.index = dates ; df

Я хочу иметь дополнительный столбец, который будет иметь максимальное значение 1-й группы положительных значений и минимальное значение2-й группы отрицательных значений и т. д.

Вывод должен выглядеть как

df['values_max'] = np.nan
df.loc['2019-01-26','values_max'] = 4
df.loc['2019-01-29','values_max'] = -3
df.loc['2019-02-01','values_max'] = 12
df

Буду признателен за любую помощь.

1 Ответ

3 голосов
/ 20 марта 2019

Использование:

#map positive and negative values to 1, -1
s = np.sign(df['values'])
#create consecutive groups
g = s.ne(s.shift()).cumsum()
#create new columns with consition
df['new'] = df.groupby(g)['values'].transform(lambda x: x.max() if x.max() > 0 else x.min())
#add missing values
df.loc[df['new'] != df['values'], 'new'] = np.nan
print (df)
            values   new
2019-01-23       1   NaN
2019-01-24       2   NaN
2019-01-25       3   NaN
2019-01-26       4   4.0
2019-01-27      -1   NaN
2019-01-28      -2   NaN
2019-01-29      -3  -3.0
2019-01-30      10   NaN
2019-01-31      11   NaN
2019-02-01      12  12.0
...