Pandas进阶之DataFrame多级索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas进阶之DataFrame多级索引相关的知识,希望对你有一定的参考价值。
参考技术A 多级索引:在一个轴上有多个(两个以上)的索引,能够以低维度形式来表示高维度的数据。单级索引是Index对象,多级索引是MultiIndex对象。使用 pandas read_csv 方法的 Python 多级索引
【中文标题】使用 pandas read_csv 方法的 Python 多级索引【英文标题】:Python Multilevel Indexing using pandas read_csv method 【发布时间】:2019-02-04 05:53:12 【问题描述】:我想将下表作为 pandas 数据框阅读
说dataframe是df,目的是查询 df['acct_id']['A']['0-3_mon] 应该给我 10
我已经为面板数据完成了它,其中所有内容都是一列,然后您为横截面和时间序列创建多级索引。
但是在这里,源数据本身有两个以上的列。如何将此 csv 作为多级索引读取?我被困在这里,任何想法。
如果您想查看一些类似的工作 - https://lectures.quantecon.org/py/pandas_panel.html
非常感谢。
【问题讨论】:
【参考方案1】:用MultiIndex
创建DataFrame
,因为deprecate panel
:
df = pd.read_csv(file, header=[0,1], index_col=[0])
然后通过slicers选择:
idx = pd.IndexSlice
print (df.loc[1, idx['A', '0-3_mon']])
示例:没有多索引名称:
import pandas as pd
temp=u"""A;A;B;B
0-3_mon;3-6_mon;0-3_mon;3-6_mon
1;10;12;14;18
2;11;15;17;19
3;13;16;21;20"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep=";", header=[0,1])
print (df)
A B
0-3_mon 3-6_mon 0-3_mon 3-6_mon
1 10 12 14 18
2 11 15 17 19
3 13 16 21 20
print (df.columns)
MultiIndex(levels=[['A', 'B'], ['0-3_mon', '3-6_mon']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]])
idx = pd.IndexSlice
print (df.loc[1, idx['A', '0-3_mon']])
10
Sample 具有指定的 MultiIndex 名称:
import pandas as pd
temp=u"""acct_id;A;A;B;B
level;0-3_mon;3-6_mon;0-3_mon;3-6_mon
1;10;12;14;18
2;11;15;17;19
3;13;16;21;20"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep=";", index_col=[0], header=[0,1])
print (df)
acct_id A B
level 0-3_mon 3-6_mon 0-3_mon 3-6_mon
1 10 12 14 18
2 11 15 17 19
3 13 16 21 20
print (df.columns)
MultiIndex(levels=[['A', 'B'], ['0-3_mon', '3-6_mon']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=['acct_id', 'level'])
idx = pd.IndexSlice
print (df.loc[1, idx['A', '0-3_mon']])
10
【讨论】:
谢谢,它是如此迅速,正是我想要的。非常感谢朋友。以上是关于Pandas进阶之DataFrame多级索引的主要内容,如果未能解决你的问题,请参考以下文章