Pandas字典类型数据的键重复与矩阵转置实现方法
实现方案
首先说明:你给出的期望结果字典存在语法小错误,index对应的值应为二维列表,即'index': [[27, 28, 29, 30, 31], [27, 28, 29, 30, 31], ...],以下是两种可直接运行的实现方法:
方法1:纯Python原生实现(无需第三方库)
# 原始数据 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]]} # 1. 转置data二维数组 df['data'] = [list(col) for col in zip(*df['data'])] # 2. 计算N:转置后data的列数 N = len(df['data'][0]) # 3. 重复index数组N次,生成二维列表 df['index'] = [df['index'].copy() for _ in range(N)] # 打印验证结果 print(df)
运行后输出的df完全符合预期,data为转置后的7行5列数组,index为包含5个相同子列表的二维数组。
方法2:使用numpy实现(适合大规模数据场景)
import numpy as np # 原始数据 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]]} # 1. 转置data df['data'] = np.array(df['data']).T.tolist() # 2. 计算N N = len(df['data'][0]) # 3. 重复index生成二维列表 df['index'] = np.tile(df['index'], (N, 1)).tolist() # 打印验证结果 print(df)
注意:如果不需要保留原始
index数组的可修改独立性,也可以直接用[df['index'] for _ in range(N)],但推荐加copy()避免后续修改一个子列表时所有子列表同步变更的问题。
内容的提问来源于stack exchange,提问作者Rinnosuke
相关产品推荐
相关产品推荐

