import pandas as pd
data = {
'name': ['Comp1', 'Comp1', 'Comp2', 'Comp2', 'Comp3'],
'entity_type': ['type1', 'type1', 'type2', 'type2', 'type3'],
'code': ['code1', 'code2', 'code3', 'code1', 'code2'],
'date': ['2024-01-31', '2024-01-31', '2024-01-29', '2024-01-31', '2024-01-29'],
'value': [10, 10, 100, 10, 200],
'source': [None, None, 'Estimated', None, 'Reported']
}
df = pd.DataFrame(data)
pivot_df = df.pivot(index='date', columns=['name', 'entity_type', 'source', 'code'], values='value').rename_axis([('name', 'entity_type', 'source', 'date')])
df = pivot_df.reset_index()
df
Это приведет к следующему:

< /p>
У меня возникла проблема со следующим:
- Я хочу удалить первый столбец
- Я хотел бы заполнить первые 3 строки по горизонтали. так, например, пустые ячейки над «кодом2» должны быть Comp1, type1, NaN
- было бы неплохо заменить эти nans в заголовках столбцов пустой строкой
РЕДАКТИРОВАНИЕ – рабочий хак
поскольку мне нужны эти данные чтобы в конечном итоге получить массив, который выглядит точно в кадре данных для вставки в электронную таблицу... это работает. Однако в этом случае не будет никаких значимых «столбцов».
out = (df.pivot(index='date', columns=['name', 'entity_type', 'source', 'code'], values='value')
.rename_axis([('name', 'entity_type', 'source', 'date')])
.reset_index()
.fillna('')
)
out.columns.names = [None, None, None, None]
columns_df = pd.DataFrame(out.columns.tolist()).T
out = pd.concat([columns_df, pd.DataFrame(out.values)], ignore_index=True)
out
Подробнее здесь: https://stackoverflow.com/questions/791 ... rizontally