Pandas dataframe groupby в новый фрейм данных с сгруппированным наблюдением в той же строке

#python #pandas #dataframe #pandas-groupby #aggregate

#python #pandas #фрейм данных #pandas-groupby #агрегировать

Вопрос:

Я создаю, df в котором наблюдения сгруппированы two by two , как показано ниже:

 group user amount
ALFA   x    2.3
ALFA   y    1.9
BETA   w    1.8
GAMMA  z    1.3
BETA   s    0.9
GAMMA  q    0.4
  

Я хочу, чтобы новый df пользователь, принадлежащий к той же группе, находился в той же строке, как показано ниже:

 user1 user2 amount1 amount2
 x      y     2.3     1.9
 w      s     1.8     0.9
 z      q     1.3     0.4
  

Значения не нужно сортировать каким-либо определенным образом.

Я пробовал с df.groupby('group').agg(['min','max']) , но это сортирует пользователей в алфавитном порядке вместо соответствующей пары user-amount.

Кто-нибудь знает, как решить это с помощью pandas?

Комментарии:

1. Всегда ли в каждой группе есть два пользователя для наблюдения?

2. Да, всегда по два в каждой группе.

Ответ №1:

Сгруппируйте фрейм данных по столбцу, group затем внутри списка, используя np.hstack горизонтальный стек соответствующих users и amount и создайте новый фрейм данных:

 d = pd.DataFrame([
       np.hstack([g['user'], g['amount']]) for _, g in df.groupby('group')],
       columns=['user1', 'user2', 'amount1', 'amount2'])
  

Результат:

   user1 user2  amount1  amount2
0     x     y      2.3      1.9
1     w     s      1.8      0.9
2     z     q      1.3      0.4