多指标loc子集法

2024-04-25 08:41:48 发布

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

给定这里创建的数据帧di:

import pandas as pd

data = {
    "Event": ['Biathlon', 'Ski Jump', 'Slalom', 'Downhill'],
    "Award": ['Gold', 'Bronze', 'Gold', 'Silver'],
    "Points":  ['100', '10', '100', '40']
}
d = pd.DataFrame(data)
di = d.set_index(["Award","Event"])

为什么执行时没有问题

di.loc['Gold','Biathlon',:]

而这个

di.loc['Gold','Biathlon','Points']

引发错误?你知道吗


更新:2/29

在翻了一些文件之后,我觉得

di.loc['Gold','Biathlon',:] 

尽管在上面的示例中似乎可以工作,但实际上根本不支持语法。在研究多索引时,我遇到了一个note describing the importance of using the sort_index()数据帧上的多索引,在用户试图使用切片的情况下。当我对上面di中的索引进行排序时,上面的语句现在抛出一个错误。这就意味着我不支持像这里那样使用三个选择参数。这将是有意义的,因为它可以被解释含糊不清。你知道吗

例如

di_isorted = di.sort_index()
di_isorted.loc['Gold','Biathlon',:] #now throws an error

Tags: the数据eventdataindex错误sortloc
1条回答
网友
1楼 · 发布于 2024-04-25 08:41:48

这是您的数据帧,它有一个多索引:

                Points
Award  Event          
Gold   Biathlon    100
Bronze Ski Jump     10
Gold   Slalom      100
Silver Downhill     40

在数据帧上使用.loc时,通常是行、列选择(即df.loc[row_indexer, column_indexer])。因此,在您的例子中,您选择了索引中带有“Gold”和“Biathlon”的行,“:”表示所有列。你知道吗

>>> di.loc['Gold','Biathlon', :]
               Points
Award Event          
Gold  Biathlon    100

请注意,如果将参数作为元组传递,则结果将作为序列返回:

>>> di.loc[('Gold','Biathlon'), :]
Points    100
Name: (Gold, Biathlon), dtype: object

尝试将.loc与语法(di.loc['Gold','Biathlon','Points'])一起使用会导致错误,因为您的多索引中只有两个级别,而您正在请求三个级别。你知道吗

KeyError: 'Key length (3) exceeds index depth (2)'

在数据帧上使用loc时,单个参数将导致该索引点处的数据横截面,从而返回一个序列。你知道吗

# or di.loc['Gold', 'Biathlon']
>>> di.loc[('Gold', 'Biathlon')]
Points    100
Name: (Gold, Biathlon), dtype: object

因此,使用行、列选择条件,可以在给定选择条件的数据帧中指定单个单元格。你知道吗

>>> di.loc[('Gold', 'Biathlon'), 'Points']
'100'

这相当于获取该位置的数据at。你知道吗

>>> di.at[('Gold', 'Biathlon'), 'Points']
'100'

有关如何使用locIndexing and Selecting Data的更多信息,请参阅文档。你知道吗

相关问题 更多 >