Применить функцию к ряду определенных строк - PullRequest
1 голос
/ 07 марта 2019

У меня есть следующий фрейм данных df:

            bucket_value  is_new_bucket
dates                                  
2019-03-07             0              1
2019-03-08             1              0
2019-03-09             2              0
2019-03-10             3              0
2019-03-11             4              0
2019-03-12             5              1
2019-03-13             6              0
2019-03-14             7              1

Я хочу применить определенную функцию (скажем, функцию среднего) к каждой bucket_value группам данных, где столбец is_new_bucket равен нулю, так что результирующий кадр данных будет выглядеть следующим образом:

            mean_values
dates             
2019-03-08     2.5
2019-03-13     6.0

Другими словами, применение функции к последовательным строкам, где is_new_bucket = 0, которая принимает bucket_value в качестве ввода.

Например, если я хочу применить функцию max, результирующий кадр данных будет выглядеть следующим образом:

            max_values
dates             
2019-03-11     4.0
2019-03-13     6.0

1 Ответ

2 голосов
/ 07 марта 2019

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

df.reset_index(inplace=True)
s=df.loc[df.is_new_bucket==0].groupby(df.is_new_bucket.cumsum()).agg({'date':'first','bucket_value':['mean','max']})
s
                    date bucket_value    
                   first         mean max
is_new_bucket                            
1             2019-03-08          2.5   4
2             2019-03-13          6.0   6

Обновление

df.loc[df.loc[df.is_new_bucket==0].groupby(df.is_new_bucket.cumsum())['bucket_value'].idxmax()]
        date  bucket_value  is_new_bucket
4 2019-03-11             4              0
6 2019-03-13             6              0

Обновление2 после использования cumsum создать ключ группы Newkey, вы можете делать все, что вам нужно,база на групповой клавише

df['Newkey']=df.is_new_bucket.cumsum()
df
        date  bucket_value  is_new_bucket  Newkey
0 2019-03-07             0              1       1
1 2019-03-08             1              0       1
2 2019-03-09             2              0       1
3 2019-03-10             3              0       1
4 2019-03-11             4              0       1
5 2019-03-12             5              1       2
6 2019-03-13             6              0       2
7 2019-03-14             7              1       3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...