我正在使用迭代代码遍历具有多索引的大数据帧。结果是一个具有多索引的系列。经过一些分析后,事实证明,大部分时间都花在获取序列的单元格值上,因此我想使用 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吗?
使用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”关键字的
问题内容: 不知道这里出了什么问题…我想要的只是本系列中的第一个也是唯一的元素 为什么这样不起作用?以及如何获得第一个元素? 问题答案: 当索引为整数时,您将无法使用位置索引器,因为选择将是模棱两可的(应基于标签还是位置返回?)。您需要明确使用 或传递标签。 由于索引类型是对象,因此可以进行以下操作: 但是对于整数索引,情况有所不同:
我试图做为。具有和其他在中具有。这是我的代码: 我得到这个错误: 什么,我哪里做错了?