2016-12-14 27 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