给定此数据帧

import pandas as pd

idx_str = [
    'blue',
    'blue',
    'blue',
    'blue',
    'red',
    'red',
    'red',
    'red',
]
idx_date = [
    pd.Timestamp('2010-01-01'),
    pd.Timestamp('2010-01-05'),
    pd.Timestamp('2010-01-06'),
    pd.Timestamp('2010-01-10'),
    pd.Timestamp('2010-01-01'),
    pd.Timestamp('2010-01-05'),
    pd.Timestamp('2010-01-06'),
    pd.Timestamp('2010-01-10'),
]
data = [1,2,3,4,5,6,7,8]

df = pd.DataFrame(
    data=zip(idx_str, idx_date, data),
    columns=['idx_str', 'idx_dates', 'data'],
)
df.set_index([idx_str, idx_date], drop=True, inplace=True)
print(df)
                 data
blue 2010-01-01     1
     2010-01-05     2
     2010-01-06     3
     2010-01-10     4
red  2010-01-01     5
     2010-01-05     6
     2010-01-06     7
     2010-01-10     8

我想查询介于datetimeIndex级和限制为第一级red colored颜色 的两个日期之间的行

所以我想要这个:

                  data
red   2010-01-02     5
      2010-01-03     6

由于多索引,我不能使用我找到的解决方案,例如

df.query("'2010-01-02' <= index <= '2010-01-09'")
df.loc['2010-01-02':'2010-01-09']

May be it wasn't so clear the first time so I edited the end result I wanted

推荐答案

第一片(slice(None), slice(start_date, end_date))对应于分别应用于两级索引的片.通过将此切片传递给.loc[],您可以 Select 满足指定日期范围条件的数据.

start_date = pd.Timestamp('2010-01-02')
end_date = pd.Timestamp('2010-01-09')
selected_data = df.loc[(slice(None), slice(start_date, end_date)), :]
print(selected_data)

Output个个

                idx_str  idx_dates  data                                                      
blue 2010-01-05    blue 2010-01-05     2                                                      
     2010-01-06    blue 2010-01-06     3                                                      
red  2010-01-05     red 2010-01-05     6                                                      
     2010-01-06     red 2010-01-06     7 

问:我想过滤多重索引的两个级别,这样答案也会过滤 colored颜色 ,为什么是第二个,在结尾处切片->;,:]

答:你可以用下面的代码行得到‘红色’. 最后一部分是针对列的过滤.结尾处的冒号表示提取所有列.

selected_data = df.loc[(slice('red','red'), slice(start_date, end_date)), 'idx_dates':'data']

Output个个

                idx_dates  data
red 2010-01-05 2010-01-05     6
    2010-01-06 2010-01-06     7

有许多Pandas 索引选项.请参考Pandas 官方文件.

MultiIndex / advanced indexing

Python-3.x相关问答推荐

Pandas 中每行的最大值范围

正则表达式匹配并提取括号前的单词

Python将类实例变量转换为嵌套 struct

正确的本地react 方式-Django身份验证

在Pandas 数据帧中为小于5位的邮政编码添加前导零

调用 Clear 时 Airflow 会加载新代码吗

我想使用命令提示符安装 cv2

在不改变 python 中原始数组顺序的情况下,对多维字符串数组进行降序排序?

为什么 return node.next 会返回整个链表?

过滤查询集和Q运算符的不同值

每个数据行中每个数据帧值的总和

如何从 Python 3.5 降级到 Python 3.4

使用 python 正则表达式匹配日期

Python:如何在三个列表中找到共同值

如何将 SimpleGUI 与 Python 2.7 和 3.0 shell 集成

如何在 Python 中计算两个包含字符串的列表的 Jaccard 相似度?

使用 Python3 与 HDFS 交互的最佳模块是什么?

Python configparser 不会接受没有值的键

无 Python 错误/错误?

Python:&= 运算符