如何将dataframe的两列分别作为行、列的索引

这个是我在intern的时候遇到的问题。处理股票信息的时候,最终需要输出一个列代表交易日期,行代表股票代码,数值为对应因子评估值的矩阵。
而原本的dataframe的由从数据库导出的信息生成的。因此对应dataframe的column是一些指标,例如股票代码,股票交易日,收盘价格等等。由于也是刚刚上手pandas一周,对应dataframe不是很熟悉,在网上搜索了一圈也没得到想要的答案,于是就自己写了一个。


原本的dataframe结构是这样的:
如何将dataframe的两列分别作为行、列的索引_第1张图片


下面是具体的代码:

res_col = []
res_col.extend(data.stock_name.unique().tolist())  # 新的列索引
res_index = pd.to_datetime(data.date.unique().tolist())  # 新的行索引,这里转化为了datatime形式,这个按照不同的需求添加
res_index = res_index.sort_values()
# 对时间的行索引进行排序,按照从小到大进行排序
res = pd.DataFrame(index=res_index, columns=res_col)
for row in data.itertuples():
    res.loc[row.date][row.stock_name] = row.vol  # loc根据索引找到对应的位置,修改单元格数值

res_column 是股票代码列去重后转为为list,res_index 是日期去重后转为list,去重后要需要根据原本dataframe的数据排列形式以及需求,对于索引进行重新的排序。然后就按照新的index和column建立新的dataframe,遍历原有datafram的每一行,然后将数值添加进去。


最终转化成的dataframe是这样的:
如何将dataframe的两列分别作为行、列的索引_第2张图片


这里遍历使用的是dataframe.itertuples()方法,速度还可以,四百万行数据大概需要几分钟,不知道有没有更快的方法。也是因为实习才上手pandas,目前pandas才使用一周左右,如果哪里有问题欢迎指正和批评。

你可能感兴趣的:(pandas,python)