python : pandas 中多重索引multiindex与多个标的dataframe
多个标的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相关推荐
- python loc iloc,Python pandas loc用法与iloc区别 聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明...
想了解聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明的相关内容吗,Rainpages在本文为您仔细讲解Python pandas loc用法与iloc区别的相关知识和一些C ...
- 独家 | 浅谈Python/Pandas中管道的用法
作者:Gregor Scheithauer博士 翻译:王闯(Chuck)校对:欧阳锦本文约2000字,建议阅读5分钟本文介绍了如何在Python/Pandas中运用管道的概念,以使代码更高效易读. 图 ...
- 谈谈对python的理解_浅谈对python pandas中 inplace 参数的理解
这篇文章主要介绍了对python pandas中 inplace 参数的理解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 pandas 中 inplace 参数在很多函数中都会有, ...
- pandas中inplace_对python pandas中 inplace 参数的理解
pandas 中 inplace 参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改 inplace = True:不创建新的对象,直接对原始对象进行修改: inplace = Fals ...
- python pandas中describe()
python pandas中,对于一维数组,describe会返回一系列参数,count,mean,std,min,25%,50%,75%,max. describe()返回值的解释如下: 1.cou ...
- Python pandas 中loc函数的意思及用法,及跟iloc的区别
Python pandas 中loc函数的意思及用法,及跟iloc的区别 loc和iloc的意思 loc和iloc的区别及用法展示 参考文献 loc和iloc的意思 首先,loc是location的意 ...
- pandas 设置多重索引_Pandas多重索引使用详解
多重索引被定义为非常重要的索引, 因为它处理数据分析和处理, 尤其是处理高维数据时.它还可以在Series和DataFrame等较低维度的数据结构中存储和处理任意数量的维度的数据. 它是标准索引对象的 ...
- Python—pandas中DataFrame类型数据操作函数
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFram ...
- Python pandas,index索引,修改索引,复合索引,将某列设为索引
demo.py(index索引,修改索引,将DataFrame某列设为索引): # coding=utf-8 import numpy as np import pandas as pddf = pd ...
最新文章
- .NET Core IdentityServer4实战 第一章-入门与API添加客户端凭据
- C#基础第七天-作业-利用面向对象的思想去实现名片-动态添加
- 编译bluez-5.25 遇到的错误及解决方法
- 从中序与后序遍历序列构造二叉树Python解法
- 新装机器如何修改IP地址
- 20135219洪韶武——信息安全系统设计基础第四周学习总结
- NOIP2000单词接龙[DFS]
- 启动、停止、重启 MySQL 常见的操作方法:
- PAIP.HIBERNATE ORA-02289 sequence does not exist的解决
- 用R软件绘制中国分省市地图
- apkg格式怎么打开_干货:pdf转换器简单、好用,还能在线互转文件格式!
- Nvivo使用步骤记录
- JavaScript 实现 标签页 切换效果
- ubuntu查看本机ip命令
- 如何提取伴奏?1分钟让你知道伴奏提取软件手机版有哪些
- 【每日蓝桥】17、一三年省赛Java组真题“带分数”
- 实验吧-密码学(二)
- 港联证券|基金和股票的区别是什么?谁更适合做短线?
- vue 图片转base64格式的方法
- InternalError: Dst tensor is not initialized. 的产生原因和解决办法