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

如何为具有多索引的系列使用熊猫. at函数

柯冯浩
2023-03-14

我正在使用迭代代码遍历具有多索引的大数据帧。结果是一个具有多索引的系列。经过一些分析后,事实证明,大部分时间都花在获取序列的单元格值上,因此我想使用 Series.at 函数,因为它要快得多。不幸的是,我没有在熊猫文档中找到任何关于多索引的内容。

这是一个简单的代码:

import numpy as np
import pandas as pd

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])

s = pd.Series(np.random.randn(8), index=index)
>>>>s
first  second
bar    one      -0.761968
       two       0.670786
baz    one      -0.193843
       two      -0.251533
foo    one       1.732875
       two       0.538561
qux    one      -1.111480
       two       0.478322
dtype: float64

我曾尝试过s.at[(“酒吧”、“一家”)],s.at[“酒吧”,“一家”),但没有这些作品。

>>>>s.at[("bar","one")]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Python\lib\site-packages\pandas\core\indexing.py", line 2270, in __getitem__
    return self.obj._get_value(*key, takeable=self._takeable)
TypeError: _get_value() got multiple values for argument 'takeable'
>>>>s.at["bar","one"]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Python\lib\site-packages\pandas\core\indexing.py", line 2270, in __getitem__
    return self.obj._get_value(*key, takeable=self._takeable)
TypeError: _get_value() got multiple values for argument 'takeable'

有人知道如何在这种情况下使用.at吗?

共有1个答案

袁康裕
2023-03-14

使用Series.loc

print (s.loc[("bar","one")])
1.265936258705534

编辑:

看来是bug。

如果使用DataFrame,效果会很好:

np.random.seed(1234)
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.Series(np.random.randn(8), index=index)
print (s)
first  second
bar    one       0.471435
       two      -1.190976
baz    one       1.432707
       two      -0.312652
foo    one      -0.720589
       two       0.887163
qux    one       0.859588
       two      -0.636524
dtype: float64

df = s.to_frame('col')
print (df)
                   col
first second          
bar   one     0.471435
      two    -1.190976
baz   one     1.432707
      two    -0.312652
foo   one    -0.720589
      two     0.887163
qux   one     0.859588
      two    -0.636524

print (df.at[("bar","one"), 'col'])
0.47143516373249306
 类似资料:
  • 问题内容: 我有一个数据框,具有以下的multiindex列: 如何将列索引级别展平/合并为:“ Level1 | Level2”,例如,。等等?如果这不可能,是否有办法像我上面所做的那样不创建多索引列? 问题答案: 您可以随时更改列:

  • 问题内容: 您是否知道如何以NumPy数组或python列表的形式获取DataFrame的索引或列? 问题答案: 要获取NumPy数组,应使用以下属性: 这样可以访问数据的存储方式,因此无需进行转换。 注意:此属性也可用于其他许多熊猫的对象。 要将索引作为列表获取,请致电: 同样,对于列。

  • 问题内容: 我创建了一个从,当我重新采样一些数据,象这样一个数:其中是: 这产生了一个看起来像这样的系列: 索引看起来像: 我不希望第二列作为索引。理想情况下,我将第1列作为“日期”,将第2列作为“销售”(删除索引的第二层)。我不太清楚如何重新配置​​索引。 问题答案: 只需致电: 有多种删除列的方法: 调用两次并指定一列: 重置索引后删除列: 重置后致电: 然后,在重置索引后,只需重命名列

  • 我想在pandas上运行一个pivot,索引是两列,而不是一列。例如,一个字段表示年份,一个字段表示月份,一个显示“项目1”和“项目2”的“项目”字段以及一个带有数值的“值”字段。我希望索引是年-月。 我唯一能做到这一点的方法是将这两个字段合并成一个字段,然后再将它们分开。有更好的办法吗? 下面复制了最少的代码。谢谢! PS是的,我知道还有其他关于“pivot”和“multi-index”关键字的

  • 问题内容: 不知道这里出了什么问题…我想要的只是本系列中的第一个也是唯一的元素 为什么这样不起作用?以及如何获得第一个元素? 问题答案: 当索引为整数时,您将无法使用位置索引器,因为选择将是模棱两可的(应基于标签还是位置返回?)。您需要明确使用 或传递标签。 由于索引类型是对象,因此可以进行以下操作: 但是对于整数索引,情况有所不同:

  • 我试图做为。具有和其他在中具有。这是我的代码: 我得到这个错误: 什么,我哪里做错了?