2016-03-26 18 views
2

varsayalım biz bu verimliVerimli

import pandas as pd 
>>> pd.DataFrame({'a': [0, 0, 1, 1], 'b': [1, 3, 5, 7], 'c': [2, 4, 6, 8]}) 

    a b c 
0 0 1 2 
1 0 3 4 
2 1 5 6 
3 1 7 8 

bir pandalar DataFrame eşdeğer içine fikri yapılabilir edilebilir Nasıl

import numpy as np 
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) 

ile başlayan A Numpy 3d dizinin itibaren A Pandalar DataFrame oluşturma sahip olmaktır a sütunu, özgün dizideki ilk boyuttaki dizine sahiptir ve sütunların geri kalanı, orijinal dizideki ikinci iki boyuttaki 2d dizilerinin dikey bir birleştirilmesidir.

(Bu döngüler ile yapmak kolaydır; soru onlarsız bunu yapmak için nasıl.) Divakar mükemmel öneri @ kullanma


uzun Örnek

:

>>> np.random.randint(0,9,(4,3,2)) 
array([[[0, 6], 
    [6, 4], 
    [3, 4]], 

    [[5, 1], 
    [1, 3], 
    [6, 4]], 

    [[8, 0], 
    [2, 3], 
    [3, 1]], 

    [[2, 2], 
    [0, 0], 
    [6, 3]]]) 

Böyle bir şeye yapılmalıdır:

>>> pd.DataFrame({ 
    'a': [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], 
    'b': [0, 6, 3, 5, 1, 6, 8, 2, 3, 2, 0, 6], 
    'c': [6, 4, 4, 1, 3, 4, 0, 3, 1, 2, 0, 3]}) 
    a b c 
0 0 0 6 
1 0 6 4 
2 0 3 4 
3 1 5 1 
4 1 1 3 
5 1 6 4 
6 2 8 0 
7 2 2 3 
8 2 3 1 
9 3 2 2 
10 3 0 0 
11 3 6 3 
+0

Bu örnek için "b": [1, 3, 5, 7] 'türmemize gerek yok mu? Ayrıca, boyutları farklı uzunluklarda olduğunda ne beklemek gerektiğini görmek için, 'a = np.random.randint (0,9, (4,3,2)) 'gibi başka bir örnek ekleyebilir misiniz? – Divakar

+0

@Divakar Mükemmel yorum için teşekkürler! –

cevap

2

Panel kullanımı:

a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) 
b=pd.Panel(rollaxis(a,2)).to_frame() 
c=b.set_index(b.index.labels[0]).reset_index() 
c.columns=list('abc') 

sonra a olup:

[[[1 2] 
    [3 4]] 

[[5 6] 
    [7 8]]] 

b edilir:

   0 1 
major minor  
0  0  1 2 
     1  3 4 
1  0  5 6 
     1  7 8 

ve c edilir:

a b c 
0 0 1 2 
1 0 3 4 
2 1 5 6 
3 1 7 8 
3

İşte nihayet şöyle bir DataFrame olarak dışarı koymadan önce numpy üzerinde işlem en işlevlerinden biri yaklaşım -

m,n,r = a.shape 
out_arr = np.column_stack((np.repeat(np.arange(m),n),a.reshape(m*n,-1))) 
out_df = pd.DataFrame(out_arr) 

hassas sütun sayısı 2, olacağını biliyorsanız öyle bizim birlikte ilk olarak b ve c son iki sütun olarak ve a olurdu, bunu böyle sütun adları ekleyebilirsiniz -

out_df = pd.DataFrame(out_arr,columns=['a', 'b', 'c']) 

Numune run -

>>> a 
array([[[2, 0], 
     [1, 7], 
     [3, 8]], 

     [[5, 0], 
     [0, 7], 
     [8, 0]], 

     [[2, 5], 
     [8, 2], 
     [1, 2]], 

     [[5, 3], 
     [1, 6], 
     [3, 2]]]) 
>>> out_df 
    a b c 
0 0 2 0 
1 0 1 7 
2 0 3 8 
3 1 5 0 
4 1 0 7 
5 1 8 0 
6 2 2 5 
7 2 8 2 
8 2 1 2 
9 3 5 3 
10 3 1 6 
11 3 3 2 
+0

Teşekkürler! Bu oldukça güzel çalıştı. Her ne kadar m, n, r yerine x, y, z ile değiştirdim. –