2017-12-01 2 views
2

Ich habe ein Multi-Index-Datenframe, wo ich einen "drei" Index mit 6 Werten hinzufügen möchte, 2 für a, b und c in den Spalten X und Y.Hinzufügen/Löschen eines Index in einem Multi-Index-Datenframe Python

import pandas as pd, numpy as np 

np.arrays = [["one", "one", "one", "two", "two", "two"], ["a", "b", "c", "a", "b", "c"]] 

df = pd.DataFrame(np.random.randn(6,2), 
       index = pd.MultiIndex.from_tuples(list(zip(*np.arrays))), 
      columns = ["X", "Y"]) 
df = round(abs(df), 3) 
df 

       X  Y 
one  a 1.521 0.048 
     b 1.595 1.783 
     c 0.286 1.042 
two  a 1.480 1.071 
     b 0.807 1.058 
     c 1.730 1.233 

Was ich möchte, ist:

    X  Y 
    one  a 1.521 0.048 
      b 1.595 1.783 
      c 0.286 1.042 
    two  a 1.480 1.071 
      b 0.807 1.058 
      c 1.730 1.233 
    three a 1.2  5.5 
      b 4.2  2.2 
      c 7.8  3.4 

auch, wie kann ich einen Index löschen? Ich habe versucht, den folgenden Code, aber es gab einen Attribute: delitem

del df.loc["one"] 

Jede Hilfe wäre genial.

Antwort

1

Ein Ansatz mit pd.concat dh

idx = pd.MultiIndex.from_tuples(list(zip(['three']*3,list('abc')))) 
new = pd.DataFrame(np.random.randn(3,2), index=idx, columns= df.columns) 
new_df = pd.concat([df,new]) 

       X   Y 
one a 0.270000 0.299000 
     b 0.644000 0.073000 
     c 1.224000 0.656000 
two a 0.202000 0.097000 
     b 2.750000 0.373000 
     c 0.421000 0.939000 
three a 1.392999 -0.870480 
     b -1.899386 -0.249068 
     c -0.609149 0.164459 

Und für Tropfen dh

new_df = new_df.drop('one',level=0) 
+0

Dank Bharath löschen, die auf jeden Fall funktioniert, aber ich hatte gehofft, für etwas einfacher, die möglicherweise beteiligt 'df .loc ["Eins"]. Werte. Je einfacher, desto besser. Dennoch, schätzen Sie diese Lösung tho. – MichaelRSF

Verwandte Themen