2016-12-02 11 views
2

Ich möchte einen von einer Software bereitgestellten Dataframe in einen python-brauchbaren transformieren und ich kann ihn nicht einfach mit Pandas reparieren, weil ich die in enthaltenen Informationen verwenden muss die Spalten. Hier ein einfaches Beispiel:Pandas dataFrame effizient transformieren mit dem Spaltennamen als Faktor

import pandas as pd 
d = {'00' : [1],'01' : [11], '10': [111], '11':[1111]} 
pd.DataFrame(d) 

    00 01 10 11 
0 1 11 111 1111 

Die Spaltennamen enthält die Faktoren, die ich in den Zeilen verwenden müssen, würde Ich mag so etwas bekommen:

df = {'trt': [0,0,1,1], 'grp': [0,1,0,1], 'value':[1,11,111,1111]} 
pd.DataFrame(df) 

    grp trt value 
0 0 0  1 
1 1 0  11 
2 0 1 111 
3 1 1 1111 

Irgendwelche Ideen, wie es richtig zu machen ?

Antwort

2

Lösung mit MultiIndex.from_arrays erstellt indexing with str und transponieren von T:

df.columns = pd.MultiIndex.from_arrays([df.columns.str[0], df.columns.str[1]]) 
print (df) 
    0  1  
    0 1 0  1 
0 1 11 111 1111 

df1 = df.T.reset_index() 
df1.columns = ['grp','trt','value'] 
print (df1) 
    grp trt value 
0 0 0  1 
1 0 1  11 
2 1 0 111 
3 1 1 1111 

ähnliche Lösung mit rename_axis und benennen index:

d = {'00' : [1],'01' : [11], '10': [111], '11':[1111]} 
df = pd.DataFrame(d) 
df.columns = pd.MultiIndex.from_arrays([df.columns.str[0], df.columns.str[1]]) 
print(df.rename_axis(('grp','trt'), axis=1).rename(index={0:'value'}).T.reset_index()) 
    grp trt value 
0 0 0  1 
1 0 1  11 
2 1 0 111 
3 1 1 1111 
+0

Vielen Dank, genau das, was ich gesucht habe! –

+0

Super, froh kann dir helfen! Schöner Tag! – jezrael

+0

Und danke für die Annahme! – jezrael

1

Für mich ist die einfachste Lösung, nur ist die Originalrahmen und Splitting Schmelzen des Spaltennamen in einem zweiten Schritt. Etwas wie folgt aus:

df = pd.DataFrame(d) 
mf = pd.melt(df) 
mf[['grp', 'trt']] = mf.pop('variable').apply(lambda x: pd.Series(tuple(x))) 

Hier mf nach dem Schmelzen:

variable value 
0  00  1 
1  01  11 
2  10 111 
3  11 1111 

Und das Endergebnis, nachdem die Variable Spalte Aufteilung:

value grp trt 
0  1 0 0 
1  11 0 1 
2 111 1 0 
3 1111 1 1 

Ich würde Sie ermutigen, mehr zu lesen beim Schmelzen hier: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.melt.html. Es kann unglaublich nützlich sein.

+0

Danke für deine Antwort und Ratschläge Ich werde näher auf die Schmelzfunktion schauen –

Verwandte Themen