#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