Pandas中MultiIndexed DataFrame切片报错:如何提取指定区域年份数据
解决DataFrame选取指定州和年份数据的问题
嘿,我来帮你搞定这个问题!你遇到的错误是因为pandas里不能直接用pop[['California','Texas'], 2010]这种方式同时指定行和列标签——DataFrame的[]运算符主要是用来选取列或者行的布尔筛选,要同时定位行和列的标签,得用.loc方法才行。
下面分两种常见的DataFrame结构情况给出解决方案:
情况1:州为行索引,年份为列
如果你的DataFrame结构是列对应年份、行对应州(如下所示):
2000 2010 California 33871648 37253956 New York 18976457 19378102 Texas 20851820 25145561
那正确的写法是使用.loc方法,先指定要选的行标签(州名),再指定列标签(年份):
pop.loc[['California', 'Texas'], 2010]
执行后就能得到California和Texas在2010年的人口数据。
情况2:州+年份为层级行索引(MultiIndex)
如果你的DataFrame是层级索引结构(行是(州, 年份)的组合,列是人口数据,如下所示):
population California 2000 33871648 2010 37253956 New York 2000 18976457 2010 19378102 Texas 2000 20851820 2010 25145561
你可以用以下几种方式实现需求:
- 方法1:用
.loc传入元组列表直接定位层级行
pop.loc[[('California', 2010), ('Texas', 2010)]]
- 方法2:用
xs方法先筛选年份,再选州
pop.xs(2010, level=1).loc[['California', 'Texas']]
- 方法3:用布尔索引筛选符合条件的行
pop[(pop.index.get_level_values(0).isin(['California', 'Texas'])) & (pop.index.get_level_values(1) == 2010)]
核心原因总结
pandas的[]运算符不支持同时传入行和列的标签组合,它主要用于单列/多列选取、布尔行筛选。要同时定位行和列的标签,必须使用.loc(基于标签的索引)或者针对层级索引的专用方法(比如xs)。
内容的提问来源于stack exchange,提问作者Dima Sidukov
相关产品推荐
相关产品推荐

