У меня есть следующий dataframe:Преобразование панды DataFrame в список Python
In [137]: counts
Out[137]:
SourceColumnID 3029903181 3029903182 3029903183 3029903184 ResponseCount
ColID QuestionID RowID
3029903193 316923119 3029903189 773 788 778 803 3142
3029903194 316923119 3029903189 766 799 782 773 3120
[2 rows x 5 columns]
, который хорошо работает для того, что я хочу, когда я к нему доступ через iloc:
In [138]: counts.iloc[0][3029903181]
Out[138]: 773
но когда я преобразовать это Сыроватского форматирует его в пути, который не доступен так же больше:
In [139]: counts.to_dict()
Out[139]:
{3029903181: {(3029903193, 316923119, 3029903189): 773,
(3029903194, 316923119, 3029903189): 766},
3029903182: {(3029903193, 316923119, 3029903189): 788,
(3029903194, 316923119, 3029903189): 799},
3029903183: {(3029903193, 316923119, 3029903189): 778,
(3029903194, 316923119, 3029903189): 782},
3029903184: {(3029903193, 316923119, 3029903189): 803,
(3029903194, 316923119, 3029903189): 773},
'ResponseCount': {(3029903193, 316923119, 3029903189): 3142,
(3029903194, 316923119, 3029903189): 3120}}
In [140]: counts.to_dict('list')
Out[140]:
{3029903181: [773, 766],
3029903182: [788, 799],
3029903183: [778, 782],
3029903184: [803, 773],
'ResponseCount': [3142, 3120]}
Мне нужно преобразовать это структура данных в стан dard python, чтобы вернуть API для его использования.
Должен ли я создать таблицу в другом формате?
Я начал с этим DataFrame:
In [141]: df
Out[141]:
ColID QuestionID ResponseCount RowID SourceColumnID
0 3029903193 316923119 773 3029903189 3029903181
1 3029903193 316923119 788 3029903189 3029903182
2 3029903193 316923119 778 3029903189 3029903183
3 3029903193 316923119 803 3029903189 3029903184
4 3029903194 316923119 766 3029903189 3029903181
5 3029903194 316923119 799 3029903189 3029903182
6 3029903194 316923119 782 3029903189 3029903183
7 3029903194 316923119 773 3029903189 3029903184
[8 rows x 5 columns]
и превратили его в сводную таблицу, как это:
counts = df.pivot_table(values='ResponseCount', rows=['ColID', 'QuestionID', 'RowID'], cols='SourceColumnID', aggfunc='sum')
Я действительно ищет структура данных, чтобы выйти из вида:
[
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903193,
'3029903181': 773,
'3029903182': 788,
'3029903183': 778,
'3029903184': 803,
'ResponseCount': 3142
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903194,
'3029903181': 766,
'3029903182': 799,
'3029903183': 782,
'3029903184': 773,
'ResponseCount': 3120
},
]
Nice, that works. Почему нужно сбросить индекс? Будет ли смысл создавать сводную таблицу по-другому? – sontek
@sontek: Я отредактировал свой ответ, чтобы объяснить, почему индекс нужно сбросить. Я не думаю, что есть необходимость создавать сводную таблицу по-разному; просто сбросьте индекс. Вам просто нужна информация в столбцах, когда сводная таблица предоставляет ее вам в индексе. – BrenBarn