提取Numpy列的一部分

2024-10-05 14:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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列的部分。在wards之后,分组列将被转置到自己的行中,并转换到下表中:

>> 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_变换中,水平值是4,4,4

有没有标准的方法?我应该看看熊猫吗?你知道吗


Tags: 方法numpy标准水平数组transformedprintwards
2条回答

你用“熊猫”来标记你的问题,所以这里有一个熊猫解决方案:

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')
>>> 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

相关问题 更多 >