我想知道是否有一种等效的方法可以像使用单个索引那样使用多索引向Series或DataFrame添加行,即使用.ix或.loc?
我想自然的方式应该是
row_to_add = pd.MultiIndex.from_tuples()
df.ix[row_to_add] = my_row
我知道我可以使用.append(),但是我会发现使用.ix[]或.loc[]要整洁得多。
下面是一个例子:
>>> df = pd.DataFrame({'Time': [dt.datetime(2013,2,3,9,0,1), dt.datetime(2013,2,3,9,0,1)], 'hsec': [1,25], 'vals': [45,46]})
>>> df
Time hsec vals
0 2013-02-03 09:00:01 1 45
1 2013-02-03 09:00:01 25 46
[2 rows x 3 columns]
>>> df.set_index(['Time','hsec'],inplace=True)
>>> ind = pd.MultiIndex.from_tuples([(dt.datetime(2013,2,3,9,0,2),0)],names=['Time','hsec'])
>>> df.ix[ind] = 5
Traceback (most recent call last):
File "<pyshell#201>", line 1, in <module>
df.ix[ind] = 5
File "C:\Program Files\Python27\lib\site-packages\pandas\core\indexing.py", line 96, in __setitem__
indexer = self._convert_to_indexer(key, is_setter=True)
File "C:\Program Files\Python27\lib\site-packages\pandas\core\indexing.py", line 967, in _convert_to_indexer
raise KeyError('%s not in index' % objarr[mask])
KeyError: "[(Timestamp('2013-02-03 09:00:02', tz=None), 0L)] not in index"
2条答案
按热度按时间hgtggwj01#
您必须指定一个元组,以便多索引工作(并且您必须完全指定所有轴,例如
:
是必需的)更容易重新索引和/或concat/append一个新的 Dataframe 。通常设置(用这种放大),只有当你用少量的值做它时才有意义。因为当你这样做的时候,这会产生一个副本。
63lcw9qa2#
由于
.ix
已弃用而更新:请改用[DataFrame.loc][1]
: