我有一个看起来像这样的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将插入没有值的地方。
这样做是否有一种简单的标准方式?我应该看看熊猫吗?
答案 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