我正在使用iterrows遍历具有multiindex的大型数据框。结果是具有多索引的系列。经过一些分析后,结果发现大部分时间都花在获取序列的单元格值上,所以我想使用Series.at函数,因为它要快得多。 不幸的是,我在pandas文档中没有找到关于multiindex的任何内容。
这是一个简单的代码:
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 [(“ bar”,“ one”)],s.at [“ bar”,“ one”],但是没有这些作品。
>>>>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吗?
答案 0 :(得分:1)
使用Series.loc
:
$('.carousel-inner').find('input').each(function(){
$(this).val()
})
编辑:
似乎是虫子。
如果使用DataFrame可以正常工作:
print (s.loc[("bar","one")])
1.265936258705534
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'])