Группировать по двум столбцам, игнорируя порядок пар

1

Предположим, у нас есть dataframe, который выглядит так:

    start   stop   duration
0   A       B      1
1   B       A      2
2   C       D      2
3   D       C      0

Какой лучший способ создать список: i) пары запуска/остановки; ii) количество пар начала/остановки; iii) средняя продолжительность пар старта/остановки? В этом случае порядок не должен иметь значения: (A,B)=(B,A).

Желаемый выход: [[start,stop,count,avg duration]]

В этом примере: [[A,B,2,1.5],[C,D,2,1]]

Теги:
pandas
dataframe
python-3.x
pandas-groupby
group-by

1 ответ

2
Лучший ответ

sort первые два столбца (вы можете сделать это на месте или создать копию и сделать то же самое, я сделал первый), затем groupby и agg:

df[['start', 'stop']] = np.sort(df[['start', 'stop']], axis=1)

(df.groupby(['start','stop'])
   .duration
   .agg(['count', 'mean'])
   .reset_index()
   .values
   .tolist())
# [['A', 'B', 2, 1.5], ['C', 'D', 2, 1.0]]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню