首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何切开一个MultiIndex熊猫的DataFrame?

如何切开一个MultiIndex熊猫的DataFrame?
EN

Stack Overflow用户
提问于 2021-03-11 18:15:27
回答 4查看 504关注 0票数 1

假设您有以下数据帧:

代码语言:javascript
运行
AI代码解释
复制
In [1]: import pandas as pd
In [2]: index = [('California',2000),('California', 2010), ('New York', 2000),
 ('New York', 2000), ('New York', 2010), ('Texas', 2000), ('Texas',2010)]
In [3]: populations = [33871648, 37253956,189765457,19378102,20851820,25145561
     ...: ]
In [4]: pop_df = pd.DataFrame(populations,index=index,columns=["Data"])
In [5]: pop_df
Out[5]:
                         Data
(California, 2000)   33871648
(California, 2010)   37253956
(New York, 2000)    189765457
(New York, 2010)     19378102
(Texas, 2000)        20851820
(Texas, 2010)        25145561

如何对此数据帧进行索引以获取所有加州数据?我尝试了下面的方法,得到了一个键错误pop_df[('California,)]。因此,我执行了以下命令,但仍然得到一个键错误:

代码语言:javascript
运行
AI代码解释
复制
In [6]: index2 = pd.MultiIndex.from_tuples(index)
In [7]: pop_df2 = pop_df.reindex(index2)
In [8]: pop_df2
Out[8]:
                      Data
California 2000   33871648
           2010   37253956
New York   2000  189765457
           2010   19378102
Texas      2000   20851820
           2010   25145561

In [9]: pop_df2['California']

pop_df2['California']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/opt/miniconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   3079             try:
-> 3080                 return self._engine.get_loc(casted_key)
   3081             except KeyError as err:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'California'

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
<ipython-input-141-18a1a54664b0> in <module>
----> 1 pop_df2['California']

~/opt/miniconda3/lib/python3.8/site-packages/pandas/core/frame.py in __getitem__(self, key)
   3022             if self.columns.nlevels > 1:
   3023                 return self._getitem_multilevel(key)
-> 3024             indexer = self.columns.get_loc(key)
   3025             if is_integer(indexer):
   3026                 indexer = [indexer]

~/opt/miniconda3/lib/python3.8/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   3080                 return self._engine.get_loc(casted_key)
   3081             except KeyError as err:
-> 3082                 raise KeyError(key) from err
   3083
   3084         if tolerance is not None:

KeyError: 'California'

索引到多索引数据帧的正确方法是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-03-11 18:20:29

你想要.loc[]。如果没有它,您将查找名为“California”的列,而不是索引标签。

顺便说一下,您的输入中有一个拼写错误,您正在复制索引条目。下面是完整的代码。

代码语言:javascript
运行
AI代码解释
复制
In [1]: import pandas as pd
   ...: index = [
   ...: ('California',2000),
   ...: ('California', 2010),
   ...: ('New York', 2000),
   ...: ('New York', 2010),
   ...: ('Texas', 2000),
   ...: ('Texas',2010)
   ...: ]
   ...: populations = [33871648, 37253956,189765457,19378102,20851820,25145561]
   ...: pop_df = pd.DataFrame(populations,index=index,columns=["Data"])
   ...: index2 = pd.MultiIndex.from_tuples(index)
   ...: pop_df2 = pop_df.reindex(index2)
   ...: pop_df2.loc['California']
Out[1]: 
          Data
2000  33871648
2010  37253956
票数 2
EN

Stack Overflow用户

发布于 2021-03-11 18:19:03

df['somename']查找列,df.loc['somename']查找索引。您需要:

代码语言:javascript
运行
AI代码解释
复制
pop_df2.loc['California']

输出:

代码语言:javascript
运行
AI代码解释
复制
          Data
2000  33871648
2010  37253956

您还可以使用xs选项,它允许在不同级别上进行切片,并保持完整的索引层次结构:

代码语言:javascript
运行
AI代码解释
复制
# default `drop_level` is True
# which behave like `.loc` on top level
pop_df.xs('California', level=0, drop_level=False)

输出:

代码语言:javascript
运行
AI代码解释
复制
                     Data
California 2000  33871648
           2010  37253956

或第二层上的xs

代码语言:javascript
运行
AI代码解释
复制
pop_df.xs(2010, level=1, drop_level=False)

为您提供:

代码语言:javascript
运行
AI代码解释
复制
                     Data
California 2010  37253956
New York   2010  19378102
Texas      2010  25145561
票数 2
EN

Stack Overflow用户

发布于 2021-03-11 18:27:55

尝试使用IndexSlice

代码语言:javascript
运行
AI代码解释
复制
pop_df2.loc[pd.IndexSlice[['California'],],]
Out[52]: 
                     Data
California 2000  33871648
           2010  37253956
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66588217

复制
相关文章
Pandas图鉴(四):MultiIndex
Polars[2]是Pandas最近的转世(用Rust编写,因此速度更快,它不再使用NumPy的引擎,但语法却非常相似,所以学习 Pandas 后对学习 Polars 帮助非常大。
数据STUDIO
2023/09/04
7560
Pandas图鉴(四):MultiIndex
Pandas 如何创建 DataFrame
我们已经知道了什么是 Series,在使用 Series 之前,我们得知道如何创建 Series。
用户7886150
2020/12/26
1.7K0
如何遍历pandas当中dataframe的行
现在需要遍历上面DataFrame的行。对于每一行,都希望能够通过列名访问对应的元素(单元格中的值)。也就是说,需要类似如下的功能:
马哥Python
2019/06/27
4.2K0
pandas越来越难学,只能自己找趣味了,你该这么学,No.11
pandas啊,全是坑 没错,今天继续学习难的 其实从这篇开始,每一篇都是难得...... 你必须要努力看了
梦想橡皮擦
2019/06/25
7590
pandas越来越难学,只能自己找趣味了,你该这么学,No.11
数据科学 IPython 笔记本 7.8 分层索引
到目前为止,我们主要关注一维和二维数据,分别存储在 Pandas Series和DataFrame对象中。通常,超出此范围并存储更高维度的数据(即由多于一个或两个键索引的数据)是有用的。
ApacheCN_飞龙
2022/06/03
4.3K0
这个dataframe,有没有好的方法,可以转化成这样一个dataframe
前几天在Python白银交流群【空翼】问了一个pandas处理Excel数据的问题,提问截图如下:
Python进阶者
2023/03/02
8800
这个dataframe,有没有好的方法,可以转化成这样一个dataframe
Python:dataframe写入mysql时候,如何对齐DataFrame的columns和SQL的字段名?
问题: dataframe写入数据库的时候,columns与sql字段不一致,怎么按照columns对应写入?
诡途
2022/05/09
1.1K0
Python:dataframe写入mysql时候,如何对齐DataFrame的columns和SQL的字段名?
Pandas 重置索引深度总结
今天我们来讨论 Pandas 中的 reset_index() 方法,包括为什么我们需要在 Pandas 中重置 DataFrame 的索引,以及我们应该如何应用该方法
周萝卜
2022/09/28
1.4K0
6种方式创建多层索引
pd.MultiIndex即具有多个层次的索引。通过多层次索引,我们就可以操作整个索引组的数据。本文主要介绍在Pandas中创建多层索引的6种方式:
皮大大
2023/08/23
2840
数据分析索引总结(中)Pandas多级索引
寄语:本文介绍了创建多级索引、多层索引切片、多层索引中的slice对象、索引层的交换等内容。
Datawhale
2020/06/04
4.6K0
自己手动复现一个熊猫烧香病毒
最近逛了一下 bilibili ,偶然的一次机会,我在 bilibili 上看到了某个 up 主分享了一个他自己仿照熊猫病毒的原型制作的一个病毒的演示视频,虽然这个病毒的出现距离现在已经十多年之久了,但是它的威胁性仍然不亚于永恒之蓝,出现了很多变种病毒。我觉得蛮有意思的,有必要深究一下,所以我花上几天的时间研究了一下熊猫烧香病毒的源码,仿照熊猫烧香病毒原型,也制作了一个类似的软件,实现的源码我会在文章的末尾给出 GitHub 项目链接,喜欢的朋友不要忘记给我一个 star and follow 呀!
Angel_Kitty
2018/09/21
7.3K0
自己手动复现一个熊猫烧香病毒
长文:一文掌握Pandas
Pandas是Python数据科学生态中重要的基础成员,功能强大,用法灵活,简单记录之。
用户2183996
2019/03/01
8630
Python数据分析pandas之多层高维索引
Python数据分析pandas之多层高维索引
Java架构师必看
2021/12/02
2.6K0
Python数据分析pandas之多层高维索引
【原创佳作】介绍Pandas实战中一些高端玩法
相信大家平常在工作学习当中,需要处理的数据集是十分复杂的,数据集当中的索引也是有多个层级的,那么今天小编就来和大家分享一下DataFrame数据集当中的分层索引问题。
用户6888863
2022/06/08
7070
【原创佳作】介绍Pandas实战中一些高端玩法
盘点一个dataframe读取csv文件失败的问题
前几天在Python钻石群【心田有垢生荒草】问了一个Pandas数据处理的问题,一起来看看吧。
前端皮皮
2023/08/17
2860
盘点一个dataframe读取csv文件失败的问题
点击加载更多

相似问题

在熊猫身上切开DataFrame?

14

熊猫MultiIndex DataFrame

19

熊猫multiIndex DataFrame分类

13

MultiIndex熊猫DataFrame栏

10

来自Dataframe的MultiIndex熊猫

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档