多个标的dataframe,如何转成多重索引的dataframe.
有点象,有中证500股票的数据,如何把这500只股票,整成一个多重索引的dataframe?

import pandas as pd
df1 = pd.read_csv(r"C:\Users\songroom\Desktop\600019.csv")
df2 = pd.read_csv(r"C:\Users\songroom\Desktop\600036.csv")
print(df1.head())
print(df2.head())

格式输出如下:

Unnamed: 0    open   close     low    high  volume    money  factor  \
0  2010-1-4 9:31  958.39  959.56  958.39  959.95    3615  3465823  39.086
1  2010-1-4 9:32  959.56  957.61  957.61  959.56    2236  2142921  39.086
2  2010-1-4 9:33  957.61  954.87  954.87  957.61    1356  1296027  39.086
3  2010-1-4 9:34  955.26  954.48  954.09  955.65    2085  1990535  39.086
4  2010-1-4 9:35  954.87  954.09  953.70  954.87    2730  2606687  39.086   high_limit  low_limit     avg  pre_close  paused  open_interest
0      1047.9     857.16  958.78     952.53       0              0
1      1047.9     857.16  958.39     959.56       0              0
2      1047.9     857.16  955.65     957.61       0              0
3      1047.9     857.16  954.48     954.87       0              0
4      1047.9     857.16  954.87     954.48       0              0  Unnamed: 0  open  close   low  high  volume    money  factor  \
0  2010-1-4 9:31  1000   1001  1002  1003    3615  3465823  39.086
1  2010-1-4 9:32  1000   1001  1002  1003    2236  2142921  39.086
2  2010-1-4 9:33  1000   1001  1002  1003    1356  1296027  39.086
3  2010-1-4 9:34  1000   1001  1002  1003    2085  1990535  39.086
4  2010-1-4 9:35  1000   1001  1002  1003    2730  2606687  39.086   high_limit  low_limit     avg  pre_close  paused  open_interest
0      1047.9     857.16  958.78     952.53       0              0
1      1047.9     857.16  958.39     959.56       0              0
2      1047.9     857.16  955.65     957.61       0              0
3      1047.9     857.16  954.48     954.87       0              0
4      1047.9     857.16  954.87     954.48       0              0

稍对数据进行整理一下,为多重索引数据的建立做准备:

codes1 = ["600019.XSHG" for i in range(len(df1))]
codes2 = ["600036.XSHG" for i in range(len(df1))]
df1 = df1.rename(columns={"Unnamed: 0":"datetime"})
df2 = df2.rename(columns={"Unnamed: 0":"datetime"})
# df1["code"] = codes1
# df2["code"] = codes2
#print(df1.head())
#print(df2.head())
import numpy as np
arr1 = np.array(df1.iloc[:,1:])
#print(arr1.shape)
arr2 = np.array(df2.iloc[:,1:])def column_hstack(arrs):row,col = arrs[0].shapefor arr in arrs:assert arr.shape == (row,col)_arrs = []for i in range(col):for j in range(len(arrs)):          temp = arrs[j][:,i]if len(_arrs)!= 0:_arrs = np.column_stack((_arrs,temp)) else:_arrs = np.array(temp)#print(f"{i} {j} _arrs.shape: {_arrs.shape}")return _arrsarrs = [arr1,arr2]
data = column_hstack(arrs)
print(data.shape)

这样,我们需要的data就准备好了。另外,行索引上,我们只放datetime,列索引上,我们放codes名称,以及各个字段。

注意:数据的大小和位置要匹配好!否则会后面报错。
需要注意的是,我们想做的格式不是下面的格式(格式1)【格式,数据是随便填充的】

格式1:这个是codes在上面,fields在下面
而是格式2:股价字段fields在上面,codes在下面

下面,我们就按经典的pd.MultiIndex.from_product构建方法来操作:

dates   = df1.datetime
codes   = ["600019.XSHG","600036.XSHG" ]
index   = pd.MultiIndex.from_product([dates],names=['datetime']) # row
fields  = ["open","close","low","high","volume","money","factor","high_limit","low_limit","avg","pre_close","paused","open_interest"]
columns = pd.MultiIndex.from_product([fields,codes],names=['fields','codes']) # col的索引顺序需要特别注意
df_data = pd.DataFrame(data,index=index,columns=columns)

上面注意:col的索引需要注意,"fields"在前面,表示在上面,"codes"在下面,这个数据要匹配好。

输出:

df_data.close
codes          600019.XSHG  600036.XSHG
datetime
2010-1-4 9:31       959.56       1001.0
2010-1-4 9:32       957.61       1001.0
2010-1-4 9:33       954.87       1001.0
2010-1-4 9:34       954.48       1001.0
2010-1-4 9:35       954.09       1001.0
2010-1-4 9:36       955.65       1001.0
2010-1-4 9:37       958.00       1001.0
2010-1-4 9:38       955.65       1001.0
2010-1-4 9:39       953.70       1001.0
2010-1-4 9:40       953.70       1001.0

经验证,数据是对的。

[df1.close,df2.close]
[0    959.561    957.612    954.873    954.484    954.095    955.656    958.007    955.658    953.709    953.70Name: close, dtype: float64, 0    10011    10012    10013    10014    10015    10016    10017    10018    10019    1001Name: close, dtype: int64]

python : pandas 中多重索引multiindex与多个标的dataframe相关推荐

  1. python loc iloc,Python pandas loc用法与iloc区别 聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明...

    想了解聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明的相关内容吗,Rainpages在本文为您仔细讲解Python pandas loc用法与iloc区别的相关知识和一些C ...

  2. 独家 | 浅谈Python/Pandas中管道的用法

    作者:Gregor Scheithauer博士 翻译:王闯(Chuck)校对:欧阳锦本文约2000字,建议阅读5分钟本文介绍了如何在Python/Pandas中运用管道的概念,以使代码更高效易读. 图 ...

  3. 谈谈对python的理解_浅谈对python pandas中 inplace 参数的理解

    这篇文章主要介绍了对python pandas中 inplace 参数的理解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 pandas 中 inplace 参数在很多函数中都会有, ...

  4. pandas中inplace_对python pandas中 inplace 参数的理解

    pandas 中 inplace 参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改 inplace = True:不创建新的对象,直接对原始对象进行修改: ​inplace = Fals ...

  5. python pandas中describe()

    python pandas中,对于一维数组,describe会返回一系列参数,count,mean,std,min,25%,50%,75%,max. describe()返回值的解释如下: 1.cou ...

  6. Python pandas 中loc函数的意思及用法,及跟iloc的区别

    Python pandas 中loc函数的意思及用法,及跟iloc的区别 loc和iloc的意思 loc和iloc的区别及用法展示 参考文献 loc和iloc的意思 首先,loc是location的意 ...

  7. pandas 设置多重索引_Pandas多重索引使用详解

    多重索引被定义为非常重要的索引, 因为它处理数据分析和处理, 尤其是处理高维数据时.它还可以在Series和DataFrame等较低维度的数据结构中存储和处理任意数量的维度的数据. 它是标准索引对象的 ...

  8. Python—pandas中DataFrame类型数据操作函数

    python数据分析工具pandas中DataFrame和Series作为主要的数据结构.  本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数.  1)查看DataFram ...

  9. Python pandas,index索引,修改索引,复合索引,将某列设为索引

    demo.py(index索引,修改索引,将DataFrame某列设为索引): # coding=utf-8 import numpy as np import pandas as pddf = pd ...

最新文章

  1. .NET Core IdentityServer4实战 第一章-入门与API添加客户端凭据
  2. C#基础第七天-作业-利用面向对象的思想去实现名片-动态添加
  3. 编译bluez-5.25 遇到的错误及解决方法
  4. 从中序与后序遍历序列构造二叉树Python解法
  5. 新装机器如何修改IP地址
  6. 20135219洪韶武——信息安全系统设计基础第四周学习总结
  7. NOIP2000单词接龙[DFS]
  8. 启动、停止、重启 MySQL 常见的操作方法:
  9. PAIP.HIBERNATE ORA-02289 sequence does not exist的解决
  10. 用R软件绘制中国分省市地图
  11. apkg格式怎么打开_干货:pdf转换器简单、好用,还能在线互转文件格式!
  12. Nvivo使用步骤记录
  13. JavaScript 实现 标签页 切换效果
  14. ubuntu查看本机ip命令
  15. 如何提取伴奏?1分钟让你知道伴奏提取软件手机版有哪些
  16. 【每日蓝桥】17、一三年省赛Java组真题“带分数”
  17. 实验吧-密码学(二)
  18. 港联证券|基金和股票的区别是什么?谁更适合做短线?
  19. vue 图片转base64格式的方法
  20. InternalError: Dst tensor is not initialized. 的产生原因和解决办法

热门文章

  1. 【项目管理】项目进度管理
  2. a16z:元宇宙解锁游戏基础设施中的新机遇
  3. 算法基础:快排优化:为什么快排都会TLE
  4. Linux查看DNS服务器及设置DNS服务器的方法
  5. au能否打开m4a文件_什么是M4V文件(以及如何打开一个文件)?
  6. C/C++语言100题练习计划 88——猜数游戏(二分查找实现)
  7. 6、Docker的常用命令
  8. python简单爬虫 指定汉字的笔画动图下载
  9. windows专业版升级企业版
  10. U盘插上,在我的电脑中不显示盘符怎么办?