I erzeugen einen leeren Datenrahmen wie folgt:Pandas: Set mehrere MultiColumns als Multiindex
topFields = ['desc', 'desc', 'price', 'price', 'units', 'units']
bottomFields = ['foo', 'bar', 'mean', 'mom_2', 'mean', 'mom_2']
resultsDf = pd.DataFrame(columns=pd.MultiIndex.from_arrays([topFields, bottomFields]))
Nun würde Ich mag die ersten beiden Spalten setzen (mit desc
als Top-Level-Wert) als Index (und als eine allgemeine Herausforderung, alle Spalten mit desc
als Top-Level-Wert). Ich habe mehrere Möglichkeiten ausprobiert, von denen keine funktionieren.
Hier ist die intuitivste (Ausfall):
>>> test = resultsDf.set_index('desc')
>>> test
Out[4]:
Empty DataFrame
Columns: [(price, mean), (price, mom_2), (units, mean), (units, mom_2)]
Index: []
>>> test.index
Out[5]: Index([], dtype='object', name='desc')
pandas
korrekt beide desc
Spalten entfernt (von "Spalten"), aber keiner von ihnen im Index erscheinen. Stattdessen habe ich nur ein Feld im Index. Wenn ich versuche, eine Zeile zu erstellen, basierend auf einem Multiindex, bekomme ich einen Fehler:
>>> test.loc[pd.IndexSlice[0, 0], :] = 1
Traceback (most recent call last):
[...]
KeyError: '[0 0] not in index'
Was würde wäre die generische Lösung, wenn ich viele 'desc'-Spalten hätte und sie alle als Index setzen wollte? – FooBar
Eine mögliche Lösung kann Tupel generieren, aber es ist wirklich schwierig, eine gute allgemeine Lösung zu machen. – jezrael