#python #pandas #dictionary
Вопрос:
У меня есть диктант данных «df»:
df = {'index': [27, 28, 29, 30, 31],
'data': [[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, 32, 33, 34, 35]]}
Я хочу изменить ключ «данные» на эквивалентную матрицу транспонирования, и я хочу дублировать ключ «индекс» столько раз, сколько столбцов в полученном ключе «данные» (в данном случае 5 раз). :
df = {'index': [27, 28, 29, 30, 31], [27, 28, 29, 30, 31], [27, 28, 29, 30, 31], [27, 28, 29, 30, 31], [27, 28, 29, 30, 31],
'data': [[1, 8, 15, 22, 29],
[2, 9, 16, 23, 30],
[3, 10, 17, 24, 31],
[4, 11, 18, 25, 32],
[5, 12, 19, 26, 33],
[6, 13, 20, 27, 34],
[7, 14, 21, 28, 35]]}
Как я могу действовать дальше? Спасибо.
Комментарии:
1. фрейм данных содержит списки? Вы не могли бы поделиться кодом для создания фрейма данных?
2. Нет, это просто пример, а не сгенерированный фрейм данных.
Ответ №1:
Вы можете транспонировать с помощью zip
df = {'index': [27, 28, 29, 30, 31],
'data': [[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, 32, 33, 34, 35]]}
df_new = {}
df_new['index'] = [df['index']]* len(df['data'])
df_new['data'] = list(zip(*df['data']))
print(df_new)
Ответ №2:
Попробуй from_records
out = pd.DataFrame.from_records(data=df['data'],index=df['index'])
Out[191]:
0 1 2 3 4 5 6
27 1 2 3 4 5 6 7
28 8 9 10 11 12 13 14
29 15 16 17 18 19 20 21
30 22 23 24 25 26 27 28
31 29 30 31 32 33 34 35
Ответ №3:
df = {'index': [df['index']]*np.array(df['data']).T.shape[1],
'data':df['index']*np.array(df['data']).T}
Транспонируйте данные после преобразования в массив numpy, разделите индекс на коэффициент, полученный из формы транспонированного массива.