当前位置: 首页 > 知识库问答 >
问题:

按特定标签定位行,仅在最后一个多索引级别[duplicate]中找到

慕阳伯
2023-03-14

在执行group-by之后,我的新df有3级multindex。我需要访问所有带有“ZEBRA”标签的行;它包含在第3级索引中。我正在尝试使用df.loc,但无法这样做。我想遍历标签,但这必须是一个嵌套循环才能在下面进行;这让我觉得我没有沿着正确的思路思考,肯定会更容易。

> indexlevel1_value1->indexlevel2_value1>indexlevel3_'stabilizer' 
> indexlevel1_value1->indexlevel2_value2>indexlevel3_'stabilizer' 
> indexlevel1_value1->indexlevel2_value3>indexlevel3_'stabilizer' 
> ................... 
> indexlevel2_value1->indexlevel2_value1>indexlevel3_'stabilizer'

这个问题看起来很接近-按索引选择多索引数据帧中的行而不丢失任何级别,但重点关注第一级索引。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
                             'foo', 'bar', 'foo', 'foo',
                             'bar', 'foo', 'bar','foo', 
                              'bar','foo' ],
                         'B' : ['one', 'one', 'two', 'three',
                                'two', 'two', 'one', 'three',
                                'two', 'three','two', 'two', 
                                'one', 'three'],
                         'C' : ['MR', 'ZEBRA', 'KID', 'ZEBRA', 
                                'MOS', 'ALPHA', 'ZULU', 'ZEBRA',
                               'TREE','PLANT', 'JOOMLA','ZEBRA',
                               'MOS','ZULU'],
                           'D' : np.random.randn(14)})  

grouped = df.groupby(['A', 'B','C'])
grouped.count()


| A   | B     | C      | D |
|-----|-------|--------|---|
| bar | one   | MOS    | 1 |
|     |       | ZEBRA  | 1 |
|     | three | ZEBRA  | 1 |
|     | two   | ALPHA  | 1 |
|     |       | JOOMLA | 1 |
|     |       | TREE   | 1 |
| foo | one   | MR     | 1 |
|     |       | ZULU   | 1 |
|     | three | PLANT  | 1 |
|     |       | ZEBRA  | 1 |
|     |       | ZULU   | 1 |
|     | two   | KID    | 1 |
|     |       | MOS    | 1 |
|     |       | ZEBRA  | 1 |

newdf= grouped.count()

newdf.loc[('bar','three','ZEBRA')]
#1

期望:

| A   | B     | C     | D |
|-----|-------|-------|---|
| bar | one   | ZEBRA | 1 |
| bar | three | ZEBRA | 1 |
| foo | three | ZEBRA | 1 |
| foo | two   | ZEBRA | 1 |

共有2个答案

苏边浩
2023-03-14

您可以执行以下操作:

grouped[grouped.index.get_level_values(2) == 'ZEBRA'].reset_index()

     A      B      C  D
0  bar    one  ZEBRA  1
1  bar  three  ZEBRA  1
2  foo  three  ZEBRA  1
3  foo    two  ZEBRA  1

另一种方式: grouped.query(“C == 'ZEBRA'”).reset_index()

养俊驰
2023-03-14

我喜欢在.loc中使用参数:

df_out.loc(axis=0)[:, :, 'ZEBRA'].reset_index()

输出:

     A      B      C  D
0  bar    one  ZEBRA  1
1  bar  three  ZEBRA  1
2  foo  three  ZEBRA  1
3  foo    two  ZEBRA  1
 类似资料:
  • 因此,问题实际上是: 我创建(从熊猫文档直接复制粘贴)数据框: 这将创建一个像这样的DataFrame:(其中最左边的列实际上是索引) 然后我想给我的名字分配col2和row1的值,即4。但是我想根据col1中的值来做这件事(因为我知道这个值)。所以它看起来或多或少像这样: 我知道这没有意义,但也许有人理解这个问题,并提出了一个提示:)可能这是非常容易做到的,但我现在可以把我的头包在所有的. lo

  • 问题内容: 我有一个pandas数据框: 我有兴趣找到其中一个标签的标签位置,例如, 查看索引值,我知道这是此标签1的整数位置。如何使熊猫知道此标签的整数值是什么? 问题答案: 您正在寻找index方法:

  • 我正在使用Python-3.6和pandas-0.24.1 我有一个熊猫数据帧: 我需要在特定索引上找到的值 错误: 在熊猫中迭代特定列的所有元素的理想方法是什么?

  • 问题内容: 我的问题是我希望flexbox的范围宽度可变,并且一切正常,但不在最后一行。我希望所有孩子都具有相同的尺寸,即使行中没有孩子(最后一行)也没有。 我的flex div可以缩小到150像素,最大可以增长到250像素,但是所有像素都必须具有相同的大小(很明显,我想要CSS解决方案,我知道用JS)。 问题答案: 不幸的是,在当前的flexbox迭代(级别1)中,没有干净的方法来解决最后一行的

  • 问题内容: 我正在使用python日志记录模块在python代码中记录事件。我也希望记录2个日志文件,一个包含用户信息,另一个包含针对开发人员的更详细的日志文件。我已将两个日志文件设置为所需的级别(usr.log = INFO和dev.log = ERROR),但无法解决如何将日志记录限制为usr.log文件,因此仅写入INFO级别日志到日志文件,而不是INFO以及上面的所有其他内容,例如INFO

  • 如何计算从特定索引开始的行数?上面的代码计算行的总数。loc1和loc2是包含工作簿、工作表、行和单元格变量的类的ref变量。