向MultiIndex DataFrame / Series添加一行

我想知道是否有一种等效的方法将行添加到具有MultiIndex的Series或DataFrame中,就像使用单个索引一样,即使用.ix还是.loc?

我以为自然的方式就像

row_to_add = pd.MultiIndex.from_tuples()

df.ix[row_to_add] = my_row

但这会引发KeyError。我知道我可以使用.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"

回答:

您必须指定一个元组才能使多索引工作(并且您必须完全指定所有轴,例如:必需)

In [26]: df.ix[(dt.datetime(2013,2,3,9,0,2),0),:] = 5

In [27]: df

Out[27]:

vals

Time hsec

2013-02-03 09:00:01 1 45

25 46

2013-02-03 09:00:02 0 5

但是,更容易重新索引和/或合并/附加新数据框。通常设置(通过这种放大)仅在使用少量值的情况下才有意义。因为这样做会产生副本。

以上是 向MultiIndex DataFrame / Series添加一行 的全部内容, 来源链接: utcz.com/qa/409408.html

回到顶部