python-2.7 - 截断多索引数据帧

标签 python-2.7 pandas

我正在从几个空气质量监测站提取数据。每个站应记录相同的参数(例如O3、NO2、SO2 等)。我可以通过添加更多列将所有内容放入一个数据框中,但这变得很草率。

将数据放入多索引数据帧中是有意义的;但是,我想有选择地提取数据(例如,从站“A”提取数据,然后在指定的日期范围内截断,然后计算统计数据)。然而,我很难弄清楚如何截断多索引数据框,并开始相信这是不可能的。下面发布的是一个示例数据框,可以让您了解我正在处理的内容。

import pandas as pd
import numpy as np

dates = pd.date_range('20130101',periods=3,freq='5s')
dates = dates.append(dates)

locations = list('AAABBB')
gascode = ['no2','o3','so2']*2

tup = pd.MultiIndex.from_tuples( zip(locations,gascode,dates), names=['Location','gas','Date'] )

data = pd.DataFrame(data=range(6),index=tup,columns=['val1'])

>>> data

Location gas Date                  val1         
A        no2 2013-01-01 00:00:00     0
         o3  2013-01-01 00:00:05     1
         so2 2013-01-01 00:00:10     2
B        no2 2013-01-01 00:00:00     3
         o3  2013-01-01 00:00:05     4
         so2 2013-01-01 00:00:10     5

通常我会将日期作为主(和唯一)索引,但这是不可行的,因为日期戳不是唯一的(即 O3、NO2 会有 2013-01-01 00:00:00 标记) ,SO2 等每个位置)。

是否可以通过三级索引截断?
我考虑过将数据转换为数据透视表,但我不认为这是最好的方法。在这种情况下,如果我可以解决日期问题,则多重索引最有意义。

最佳答案

多索引有一个隐含的层次结构的概念;如果您的计算倾向于打破这种层次结构,那么您最好不要使用多索引。至于您的示例,您可以通过不同的索引顺序来实现您想要的目的。也就是说,如果数据帧按 ['Location','Date','gas'] 索引(按该顺序)

                                  val1
Location Date                gas      
A        2013-01-01 00:00:00 no2     0
         2013-01-01 00:00:05 o3      1
         2013-01-01 00:00:10 so2     2
B        2013-01-01 00:00:00 no2     3
         2013-01-01 00:00:05 o3      4
         2013-01-01 00:00:10 so2     5

您可以使用ix,如下所示:

df.ix[ 'A' ].ix[ pd.Timestamp( '2013-01-01 00:00:05' ):pd.Timestamp( '2013-01-01 00:00:10' )]

输出:

                         val1
Date                gas      
2013-01-01 00:00:05 o3      1
2013-01-01 00:00:10 so2     2

或者对于单列:

df.val1[ 'A' ][ pd.Timestamp( '2013-01-01 00:00:05' ):pd.Timestamp( '2013-01-01 00:00:10' )]

输出:

Date                 gas
2013-01-01 00:00:05  o3     1
2013-01-01 00:00:10  so2    2
Name: val1, dtype: int64

关于python-2.7 - 截断多索引数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20431617/

相关文章:

Python - 通过从B表中选择id来更新一个表中的多条记录的最快方法

python-2.7 - 如何修复 python numpy.maximum 中的 ' MaskedArrayFutureWarning ' ?

python - 连接 Pandas 数据帧时整数变成 float

python - 递归计算 DataFrame 值

python - 使用多个术语和 Q 过滤器对reduce 查询进行排序

python - 为什么 Anaconda 将我的默认 Python 路径添加到特定环境的路径中?

python-2.7 - GMG无法在Open CV 3.0中运行

python - pandas:合并多个数据框

python - 计算 Pandas 数据框中每列值的变化

python - 按具有相同名称的列连接数据框