提取Numpy列的一部分

时间:2016-12-14 17:58:04

标签: python pandas 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列分组的第2列的部分。在病房之后,分组的列将被转换为它自己的行并转换到下表:

>> 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个。第2列中的相应值为4,4,4。因此,在x_transformed中,水平值为4,4,4

这样做是否有一种简单的标准方式?我应该看看熊猫吗?

2 个答案:

答案 0 :(得分:3)

您使用“Pandas”标记了您的问题,因此这是一个Pandas解决方案:

TeamsNumberIdentifier[] securityPolicyIdArray = securityPolicyIds.stream()
            .map(securityPolicy -> new TeamsNumberIdentifier(Long.valueOf(securityPolicy)))
            .toArray(TeamsNumberIdentifier[]::new);

假设您有以下列:

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

答案 1 :(得分: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