группировать строки в кадре данных pandas, когда разница между последовательными строками меньше значения - PullRequest
1 голос
/ 17 июня 2020

У меня есть такой фрейм данных,

col1    col2    col3
 1        2       3
 2        3       4
 4        2       3
 7        2       8
 8        3       4
 9        3       3
 15       1       12

Теперь я хочу сгруппировать те строки, где разница между двумя последовательными строками col1 меньше 3. и суммировать значения других столбцов, создать еще один столбец ( col4) с последним значением группы, итоговый фрейм данных будет выглядеть так:

col1    col2    col3    col4
  1       7       10     4
  7       8       15     9

использование для l oop для этого утомительно, искать какие-то pandas ярлыки для этого максимально эффективно.

1 Ответ

1 голос
/ 17 июня 2020

Вы можете выполнить именованную агрегацию в groupby:

(df.groupby(df.col1.diff().ge(3).cumsum(), as_index=False)
   .agg(col1=('col1','first'),
        col2=('col2','sum'),
        col3=('col3','sum'),
        col4=('col1','last'))
)

Вывод:

   col1  col2  col3  col4
0     1     7    10     4
1     7     8    15     9
2    15     1    12    15

update без именованной агрегации вы можете сделать что-то вроде этого:

groups = df.groupby(df.col1.diff().ge(3).cumsum())
new_df = groups.agg({'col1':'first', 'col2':'sum','col3':'sum'})
new_df['col4'] = groups['col1'].last()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...