Этот код должен решить вашу проблему
import pandas as pd
# Example df
data = {'user': ['A', 'A', 'B', 'B', 'B', 'C', 'C'],
'category':['a','b', 'a', 'b', 'g', 'g', 'i'],
'freq': [1, 2, 3, 1, 3, 1, 2],
'visit_1_date': ['2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01']
}
df = pd.DataFrame(data)
result = df.pivot(index='user', columns='category')
print(result.head())
# OUTPUT
freq visit_1_date
category a b g i a b g i
user
A 1.0 2.0 NaN NaN 2019-10-01 2019-10-01 NaN NaN
B 3.0 1.0 3.0 NaN 2019-10-01 2019-10-01 2019-10-01 NaN
C NaN NaN 1.0 2.0 NaN NaN 2019-10-01 2019-10-01
Если вы попробуете тот же код, но с набором данных с большим количеством столбцов, таких как visit_2_date, ... , вы получите расширенные результаты.
data = {'user': ['A', 'A', 'B', 'B', 'B', 'C', 'C'],
'category':['a','b', 'a', 'b', 'g', 'g', 'i'],
'freq': [1, 2, 3, 1, 3, 1, 2],
'visit_1_date': ['2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01'],
'visit_2_date': ['2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01', '2019-10-01']
}
df = pd.DataFrame(data)
result = df.pivot(index='user', columns='category')
print(result.head())
# OUTPUT
freq ... visit_2_date
category a b g i ... a b g i
user ...
A 1.0 2.0 NaN NaN ... 2019-10-01 2019-10-01 NaN NaN
B 3.0 1.0 3.0 NaN ... 2019-10-01 2019-10-01 2019-10-01 NaN
C NaN NaN 1.0 2.0 ... NaN NaN 2019-10-01 2019-10-01
В основном, когда мы поворачиваемся, используя user в качестве параметра индекса, мы вынуждаем возвращать одну строку на пользователя. Если мы установим категорию в качестве параметра столбцов без указания параметра значений, функция будет использовать оставшиеся столбцы в качестве значений.
Для получения дополнительной информации см. Документацию