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

具有多索引的df.at与df.loc

祖翰音
2023-03-14

我有一个关于<code>df之间的区别的问题。loc和测向。对于具有多索引的数据帧,在处。我一直在查看stackoverflow中的一些精彩资源,但它似乎没有阐明我的问题。特别是这一个……熊猫。at vs.loc(或者至少我不完全理解这里展示的是什么)。

根据熊猫留档,https://pandas-docs.github.io/pandas-docs-travis/generated/pandas.DataFrame.at.html,df.at应该返回奇异值,它比df.loc快,所以我倾向于使用df.at。让我展示一下我的困惑,因为它适用于将df.at与MultiIndex一起使用。

我有以下数据框架:

df = pd.DataFrame({'field1':['foo']*6, 'field2':['bar']*6, 'field3': 
['a','a','b','b','b','c'],'value1':[0.4,0.5,0.4,0.7,.9,.4],'value2': 
[4000,4000,9000,9000,9000,10000]}, index=range(6))

df
Out[329]: 
  field1 field2 field3  value1  value2
0    foo    bar      a     0.4    4000
1    foo    bar      a     0.5    4000
2    foo    bar      b     0.4    9000
3    foo    bar      b     0.7    9000
4    foo    bar      b     0.9    9000
5    foo    bar      c     0.4   10000

我想使用MultiIndex访问此数据帧,因此我正在执行以下操作:

df = df.set_index(['field1','field2','field3'])

所以现在我想在我的df中访问value e1at('foo','bar','c')这是一个奇异值,它错误。

df.at[('foo','bar','c'),'value1']
Traceback (most recent call last):

  File "<ipython-input-344-921b8b658a49>", line 1, in <module>
    df.at[('foo','bar','c'),'value1']

  File "C:\Anaconda2\lib\site-packages\pandas\core\indexing.py", line 1610, 
in __getitem__
    return self.obj.get_value(*key, takeable=self._takeable)

  File "C:\Anaconda2\lib\site-packages\pandas\core\frame.py", line 1836, in 
get_value
    return engine.get_value(series.get_values(), index)

  File "pandas\index.pyx", line 103, in pandas.index.IndexEngine.get_value 
(pandas\index.c:3234)

  File "pandas\index.pyx", line 111, in pandas.index.IndexEngine.get_value 
(pandas\index.c:2931)

  File "pandas\index.pyx", line 152, in pandas.index.IndexEngine.get_loc 
(pandas\index.c:3830)

  File "pandas\index.pyx", line 170, in 
pandas.index.IndexEngine._get_loc_duplicates (pandas\index.c:4154)

TypeError: only integer arrays with one element can be converted to an index

我假设这是返回一个序列对象,它不能用单个值表示?这只是我的假设,给定df.loc的输出。

df.loc[('foo','bar','c')]['value1']
 Out[345]: 
field1  field2  field3
foo     bar     c         0.4
Name: value1, dtype: float64

如果我没有使用多索引,我想这个问题不会出现...

这周围有什么,或者我明显漏掉了什么?谢谢你

共有1个答案

融宏伟
2023-03-14

你可以试着这样做:

# setting multiindex
df = df.set_index(['field1','field2','field3'])

现在,当您像这样使用< code>df.at时:< code>df.at[('foo ',' bar ',' c')]['value1'],您将获得所需的结果:

field1  field2  field3
foo     bar     c         0.4
Name: value1, dtype: float64

根据我的尝试,您可能没有正确使用上的<code>查询数据帧。

 类似资料:
  • 问题内容: 我有一个索引元组数组,我想用它从多维numpy数组中选取值, 理解只有在已知的情况下才有效。 有什么提示吗? 问题答案: 您可以将的转置版本转换为元组,然后为矢量化解决方案建立索引-

  • 问题内容: 我在MySQL数据库中有下表: SQL将如下所示: 如您所见,我同时创建了primaryId和和imgDate索引键。我的想法是,该WHERE子句使用primaryId,而ORDER子句使用来查询结果imgDate。 我的问题是,现在使用多索引会更好吗?还是我应该使用多列索引(目前我不太了解)? 这是我从EXPLAIN得到的: 注意:这不是使用多列索引,这是使用上表说明的结果。 问题答

  • 我的集合中有两个数组(一个是嵌入式文档,另一个只是字符串的简单集合)。文档,例如: 由于一些查询将仅包含策略,而一些查询将包含标签和参与者数组,并且考虑到我无法创建具有两个数组的多键索引这一事实,我认为使用索引交叉点将是一个经典场景。 我正在执行一个查询,但我看不到交叉点。 以下是索引: 以下是查询: 这是解释的结果: 查询中的每个标记(tag1、tag-2和tag-3)都有10K个文档。每个策略

  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 问题内容: 当我尝试仅获取像这样的数组的第一个元素时 我得到这个错误 我想找到一种在仍然使用切片的情况下执行此操作的方法,因为完整的代码会打开,并使用两列(从1到N之间不等)的所有列读取许多不同的文件。 问题答案: 您的数组只有 一个 维度:其形状为。然而,你的切片 指定选择 2米 的尺寸。这导致NumPy引发错误。 要从中获取第一个元素,只需编写即可(此处仅选择一个维度)。 看另一个问题,如果您

  • 我有一个具有以下结构的表,它显示日历条目: 我想创建一个具有以下结构的新表,该表将显示第一行中给定日期的所有用户及其计划。: 我的问题是这样的: 如果Date1(或Date2…)在开始日期和结束日期之间,我想在第二个表中显示行的标题。所以我需要一个可以在所有单元格中编写的excel公式。 。 我可以写一个这样的SQL语句(我知道它的语法不正确,但我想展示我需要的内容): .............