2014-07-23 14 views
8

Ich frage mich, ob es eine gleichwertige Möglichkeit gibt, eine Zeile oder einen DataFrame mit einem MultiIndex einer Zeile hinzuzufügen, wie es mit einem einzigen Index, d.h. mit .ix oder .loc?Hinzufügen einer Zeile zu einem MultiIndex DataFrame/Series

dachte ich, die natürliche Art und Weise so etwas wie

row_to_add = pd.MultiIndex.from_tuples() 
df.ix[row_to_add] = my_row 

sein würde, aber das wirft eine KeyError. Ich weiß, dass ich .append() verwenden kann, aber ich würde es viel besser finden, .ix [] oder .loc [] zu verwenden.

hier ein Beispiel:

>>> 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" 

Antwort

11

Sie haben ein Tupel angeben, für die Multi-Indizierung zu arbeiten (und Sie haben, um alle Achsen angeben, zB die : notwendig ist)

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 

Leichter neu indizieren und/oder concat/anhängen eines neuen Datenrahmens. Die allgemeine Einstellung (mit dieser Art der Vergrößerung) ist nur sinnvoll, wenn Sie mit einer kleinen Anzahl von Werten arbeiten. Da dies eine Kopie macht, wenn Sie dies tun.

Verwandte Themen