Я хотел бы уточнить ваш конечный результат; Я предполагаю, что вы хотите, чтобы они имели значение NaN или какой-либо тип значения, указывающий, что они пустые, а не 0, поскольку это может повлиять на следующий этап обработки.
Кроме того, мне неясно, что вы будете sh чтобы достичь, имея столбцы, такие как «зеленый», «синий», «красный». Поскольку вы sh хотите иметь уникальные значения для каждого пользователя, я бы предположил, что вам нужен логический массив, чтобы вы знали, есть ли значащее значение или нет.
Если я правильно понимаю, вот код для получения что вам нужно
d = {'USER_ID': ['USER 1', 'USER 2', 'USER 1', 'USER 3'],
"Category": ['Green', 'Blue', 'Red', 'Green'],
'Height': ['172cm', '169cm', '153cm', '172cm'],
'Weight': ['69kg', '61kg', '41kg', '59kg']}
df = pd.DataFrame(data=d)
df.pivot(index='USER_ID', columns='Category')
Вы можете посмотреть документацию для сводки здесь:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html