【发布时间】:2015-11-28 23:30:58
【问题描述】:
我正在使用基本上是这样的时间序列的 pandas 数据帧:
level
Date
1976-01-01 409.67
1976-02-01 409.58
1976-03-01 409.66
…
我想要的是级别列的多个索引/标题,如下所示:
Station1 #Name of the datasource
43.1977317,-4.6473648,5 #Lat/Lon of the source
Precip #Type of data
Date
1976-01-01 409.67
1976-02-01 409.58
1976-03-01 409.66
…
所以基本上我正在寻找类似Mydata.columns.level1 = ['Station1']、Mydata.columns.level2 = [Lat,Lon]、Mydata.columns.level3 = ['Precip'] 的东西。
原因是一个位置可以有多个数据集,并且我希望能够从一个位置选择所有数据,或者从所有位置选择特定类型的所有数据,从随后合并的大数据框中。
我可以从 pandas 文档中设置一个示例数据框,并测试我的选择,但是对于我的真实数据,我需要一种不同的方式来设置索引,就像示例中一样。
例子:
构建一个小数据框
header = [np.array(['location','location','location','location2','location2','location2']),
np.array(['S1','S2','S3','S1','S2','S3'])]
df = pd.DataFrame(np.random.randn(5, 6), index=['a','b','c','d','e'], columns = header )
df
location location2
S1 S2 S3 S1 S2 S3
a -1.469932 -1.544511 -1.373463 -0.317262 0.024832 -0.641000
b 0.047170 -0.339423 1.351253 0.601172 -1.607339 0.035932
c -0.257479 1.140829 0.188291 -0.242490 1.019315 -1.163429
d 0.832949 0.098170 -0.818513 -0.070383 0.557419 -0.489839
e -0.628549 -0.158419 0.366167 -2.319316 -0.474897 -0.319549
选择数据类型或位置:
df.loc(axis=1)[:,'S1']
location location2
S1 S1
a -1.469932 -0.317262
b 0.047170 0.601172
c -0.257479 -0.242490
d 0.832949 -0.070383
e -0.628549 -2.319316
df['location']
S1 S2 S3
a -1.469932 -1.544511 -1.373463
b 0.047170 -0.339423 1.351253
c -0.257479 1.140829 0.188291
d 0.832949 0.098170 -0.818513
e -0.628549 -0.158419 0.366167
或者我只是在寻找错误的术语?因为文档中 90% 的示例,而且这里的问题仅将垂直“资料”(在我的情况下为日期或 abcde)视为索引,而我的测试数据上的快速 df.index.values 也只是让我得到垂直的 @987654329 @。
【问题讨论】:
-
您的问题到底是什么?从您的示例数据框开始,您想获得什么?
-
我正在询问如何为数据框提供多个索引。我需要
Location、LatLon和Type的字符串,而不是单个level。示例数据框只是为了说明为什么我需要多个索引。 -
你的意思是像
df.loc(axis=1)['location','S1'](或df['location','S1'])吗? -
不,我已经弄清楚了“挑选东西”的部分。这只是为了说明“为什么”!我正在寻找一种将我的真实数据转换为可以使用这些选择的形式的方法。我稍微改变了问题。我正在寻找一种使用
df.columns = ['something']设置多个列的方法 -
啊,你想创建多索引列。你可以做类似
df.columns = pd.MultiIndex.from_tuples([('Station1', 'Precip', ..), ..])
标签: python pandas multi-index