[英]Assigning values to Pandas Multiindex DataFrame by index level
[英]Select named index level from pandas DataFrame MultiIndex
我创建了一个数据框:
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"])
现在我想创建另一个年份> 2008的数据框。 因此我试过:
df2 = df1[df1.year>2008]
但得到错误:
AttributeError: 'DataFrame' object has no attribute 'year'
我猜,它没有看到列中的“年份”,因为我在索引中定义了它。 但是,在这种情况下,如何根据年份> 2008获取数据?
使用MultiIndex.get_level_values
按名称获取级别,并为行选择创建一个布尔掩码:
df2 = df1[df1.index.get_level_values('year') > 2008]
如果您打算进行修改,请创建df1
的副本,以便不对视图进行操作。
df2 = df1[df1.index.get_level_values('year') > 2008].copy()
你是正确的year
是一个索引而不是一个列。 一种解决方案是使用pd.DataFrame.query
,它允许您直接使用索引名称:
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
假设您的索引已排序
df.loc[2008:]
Out[259]:
value
year
2010 2
2015 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.