2016-12-12 5 views
1

Ich habe einen Datenrahmen wie untenPandas Ändern Dataframe

  0   1  2   3   4   5 
    0 0.428519 0.000000 0.0 0.541096 0.250099 0.345604 
    1 0.056650 0.000000 0.0 0.000000 0.000000 0.000000 
    2 0.000000 0.000000 0.0 0.000000 0.000000 0.000000 
    3 0.849066 0.559117 0.0 0.374447 0.424247 0.586254 
    4 0.317644 0.000000 0.0 0.271171 0.586686 0.424560 

würde Ich mag es, wie unten

0  0  0.428519 
    0  1  0.000000 
    0  2  0.0 
    0  3  0.541096 
    0  4  0.250099 
    0  5  0.345604 
    1  0  0.056650 
    1  1  0.000000 
    ........ 

Antwort

1

Verwenden stack mit reset_index ändern:

df1 = df.stack().reset_index() 
df1.columns = ['col1','col2','col3'] 
print (df1) 
    col1 col2  col3 
0  0 0 0.428519 
1  0 1 0.000000 
2  0 2 0.000000 
3  0 3 0.541096 
4  0 4 0.250099 
5  0 5 0.345604 
6  1 0 0.056650 
7  1 1 0.000000 
8  1 2 0.000000 
9  1 3 0.000000 
10  1 4 0.000000 
11  1 5 0.000000 
12  2 0 0.000000 
13  2 1 0.000000 
14  2 2 0.000000 
15  2 3 0.000000 
16  2 4 0.000000 
17  2 5 0.000000 
18  3 0 0.849066 
19  3 1 0.559117 
20  3 2 0.000000 
21  3 3 0.374447 
22  3 4 0.424247 
23  3 5 0.586254 
24  4 0 0.317644 
25  4 1 0.000000 
26  4 2 0.000000 
27  4 3 0.271171 
28  4 4 0.586686 
29  4 5 0.424560 

Numpy Lösung mit numpy.tile und numpy.repeat, Abflachen durch numpy.ravel:

df2 = pd.DataFrame({ 
     "col1": np.repeat(df.index, len(df.columns)), 
     "col2": np.tile(df.columns, len(df.index)), 
     "col3": df.values.ravel()}) 
print (df2) 
    col1 col2  col3 
0  0 0 0.428519 
1  0 1 0.000000 
2  0 2 0.000000 
3  0 3 0.541096 
4  0 4 0.250099 
5  0 5 0.345604 
6  1 0 0.056650 
7  1 1 0.000000 
8  1 2 0.000000 
9  1 3 0.000000 
10  1 4 0.000000 
11  1 5 0.000000 
12  2 0 0.000000 
13  2 1 0.000000 
14  2 2 0.000000 
15  2 3 0.000000 
16  2 4 0.000000 
17  2 5 0.000000 
18  3 0 0.849066 
19  3 1 0.559117 
20  3 2 0.000000 
21  3 3 0.374447 
22  3 4 0.424247 
23  3 5 0.586254 
24  4 0 0.317644 
25  4 1 0.000000 
26  4 2 0.000000 
27  4 3 0.271171 
28  4 4 0.586686 
29  4 5 0.424560