2016-12-14 26 views
0

的一部分,我有一個numpy的陣列看起來像這樣:提取一個numpy的列

>> print(x) 

+-----+-----+-----+ 
| 0 | 1 | 2 | 
|-----+-----+-----| 
| 1 | 1 | 2 | 
| 1 | 1 | 2 | 
| 1 | 2 | 1 | 
| 1 | 5 | 4 | 
| 1 | 7 | 4 | 
| 1 | 7 | 4 | 
| 1 | 7 | 4 | 
| 1 | 12 | 1 | 

我想提取上一列1分組分組的第二列的部分。之後病房分組列將被轉變爲自己的行和coverted見下表:

>> print(x_transformed) 

+-----+-----+-----+-----+-----+ 
| 0 | 1 | 2 | 3 | 4 | 
|-----+-----+-----+-----+-----| 
| 1 | 1 | 2 | 2 | 0 | 
| 1 | 2 | 1 | 0 | 0 | 
| 1 | 5 | 4 | 0 | 0 | 
| 1 | 7 | 4 | 4 | 4 | 
| 1 | 12 | 1 | 0 | 0 | 

0的會在那裏有沒有價值的地方插入。

  • 例如,如果您查看第1列中的表1,我們有7的表1。第2列中的相應值是4,4,4。因此,在x_transformed,水平值是4,4,4

是否有一個numpy標準方式做到這一點?我應該看看熊貓嗎?

回答

3

您與「熊貓」標記你的問題,所以這裏是大熊貓的解決方案:

In [7]: df.pivot_table(index=['0','1'], columns=df.groupby(['0','1']).cumcount()+2, values='2', fill_value=0).reset_index() 
Out[7]: 
    0 1 2 3 4 
0 1 1 2 2 0 
1 1 2 1 0 0 
2 1 5 4 0 0 
3 1 7 4 4 4 
4 1 12 1 0 0 

假設你有以下欄目:

In [8]: df.columns 
Out[8]: Index(['0', '1', '2'], dtype='object') 
+1

您需要回答更多的NumPy的的標籤的! ;)新年快樂順便! – Divakar

+0

謝謝@Divakar,我會嘗試,但我仍然需要學習很多! ;) 祝你新年快樂 !!! – MaxU

3
>>> df['c'] = df.groupby('1').cumcount() 
>>> df.set_index(['0', '1', 'c'], inplace=True) 
>>> df.unstack(fill_value=0).reset_index() 
    0 1 2  
c   0 1 2 
0 1 1 2 2 0 
1 1 2 1 0 0 
2 1 5 4 0 0 
3 1 7 4 4 4 
4 1 12 1 0 0