首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从pandas DataFrame MultiIndex中选择命名索引级别

从pandas DataFrame MultiIndex中选择命名索引级别
EN

Stack Overflow用户
提问于 2018-08-20 09:18:05
回答 3查看 3.4K关注 0票数 3

我创建了一个数据帧作为:

代码语言:javascript
运行
复制
df1 = pandas.read_csv(ifile_name,  header=None,  sep=r"\s+",  usecols=[0,1,2,3,4],
                              index_col=[0,1,2], names=["year", "month", "day", "something1", "something2"])

现在我想创建另一个数据帧where year>2008。因此,我尝试了:

代码语言:javascript
运行
复制
df2 = df1[df1.year>2008]

但是得到了错误:

代码语言:javascript
运行
复制
AttributeError: 'DataFrame' object has no attribute 'year'

我猜,它看不到列中的“年份”,因为我在索引中定义了它。但是在这种情况下,我如何获得基于year>2008的数据呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-20 09:49:08

year是一个索引而不是一个列,这一点您是正确的。一种解决方案是使用pd.DataFrame.query,它允许您直接使用索引名称:

代码语言:javascript
运行
复制
df = pd.DataFrame({'year': [2005, 2010, 2015], 'value': [1, 2, 3]})
df = df.set_index('year')

res = df.query('year > 2008')

print(res)

      value
year       
2010      2
2015      3
票数 3
EN

Stack Overflow用户

发布于 2018-08-20 09:21:35

使用MultiIndex.get_level_values按名称获取级别,并为行选择创建布尔掩码:

代码语言:javascript
运行
复制
df2 = df1[df1.index.get_level_values('year') > 2008]

如果计划进行修改,请创建df1的副本,以便不对视图进行操作。

代码语言:javascript
运行
复制
df2 = df1[df1.index.get_level_values('year') > 2008].copy()
票数 6
EN

Stack Overflow用户

发布于 2018-08-20 10:05:39

假设您的索引已排序

代码语言:javascript
运行
复制
df.loc[2008:]
Out[259]: 
      value
year       
2010      2
2015      3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51923088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档