Pandas数据帧索引长度与行数不匹配

2024-10-06 09:02:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有两级多重索引的DataFrame:“State”和“RegionName”(如果有人在Coursera上完成了Python专门化的applicated Data Science,这是第一个类的最后一个项目)。在

我试图将索引的“RegionName”级别设置为DataFrame的列,并使用它来创建布尔掩码。在

我试着跟着:

housing_data['Town'] = housing_data.index.levels[1]

我得到一个错误:“值的长度与索引的长度不匹配”

我试图弄清楚这是怎么可能的,因为我实际上是在使用DataFrame的索引向同一个DataFrame添加一个列。长度怎么可能不匹配?在

如果它增加了任何额外的洞察力:

^{pr2}$

这可能是我的问题之一吗?在


Tags: 项目dataframedataindex级别sciencestate掩码
2条回答

你试过重置吗?在

df.reset_index(level=['RegionName'],inplace=True)

跳到最后一部分(首先不需要为布尔掩码创建新列!)在

现在,为了回答你的问题。。。在

你的数据帧没问题!用你的方法,你只缺了一步。从.levels[]获取值只是第一步。在

import pandas as pd
import numpy as np

iterables = [['bar', 'baz', 'foo', 'qux'], ['one', 'two']]
mult_index  = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 3), index=mult_index, columns=['A', 'B', 'C'])

mult_index # same as df.index

这将输出:

^{pr2}$

从这里可以看出,返回levels值是不够的。您还必须将这些值映射到相应的labels值上。labels的长度将与行数相同。在

df['index_val1'] = [ mult_index.levels[0][i] for i in mult_index.labels[0]]

或者

df['index_val1'] = [ df.index.levels[0][i] for i in df.index.labels[0]]

不过,这个映射有一个内置函数!在

df['index_val1'] = df.index.get_level_values(0)

实际上,您可以使用get_level_values来完成所有的布尔蒙版。不需要创建额外的列。在

df[ df.index.get_level_values(0)=='bar']

相关问题 更多 >