如何根据第三列中的值将numpy数组中的数据从列/行移动到另一个

时间:2016-03-03 13:25:38

标签: python numpy pandas reshape

我试图对这些数据进行排序:

enter image description here

到此: enter image description here

基本上我正在尝试压缩5行数据,每行数据包含1个ID和2个值,分为1行数据和1个ID和10个值。我的数据是约。 600万行长。有一点需要注意:并非每个组都有5个(X,Y)坐标值。有些只有4.

我无法通过单独索引来弄清楚如何做到这一点。所以我写了一个for循环,它不能很好地工作。它将排序前10,000个ok(但以错误结束),但它需要永远。

   $scope.submit = function(message,title){
   var tempArr = [];
   angular.forEach($scope.users, function(user){
   tempArr.push( {"name":user.name} );
   });

有人可以用索引或更好的循环来帮助我吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

假设

coords = pd.read_csv('IDQQCoords.csv') 

暗示您正在使用Pandas,那么产生所需结果的最简单方法是使用DataFrame.pivot

import pandas as pd
import numpy as np
np.random.seed(2016)

df = pd.DataFrame({'shapeid': [0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2],
               'x': np.random.random(14),
               'y': np.random.random(14)}) 
#     shapeid         x         y
# 0         0  0.896705  0.603638
# 1         0  0.730239  0.588791
# 2         0  0.783276  0.069347
# 3         0  0.741652  0.942829
# 4         0  0.462090  0.372599
# 5         1  0.642565  0.451989
# 6         1  0.224864  0.450841
# 7         1  0.708547  0.033112
# 8         1  0.747126  0.169423
# 9         2  0.625107  0.180155
# 10        2  0.579956  0.352746
# 11        2  0.242640  0.342806
# 12        2  0.131956  0.277638
# 13        2  0.143948  0.375779

df['col'] = df.groupby('shapeid').cumcount()
df = df.pivot(index='shapeid', columns='col')
df = df.sort_index(axis=1, level=1)
df.columns = ['{}{}'.format(col, num) for col,num in df.columns]
print(df)

产量

               x0        y0        x1        y1        x2        y2        x3  \
shapeid                                                                         
0        0.896705  0.603638  0.730239  0.588791  0.783276  0.069347  0.741652   
1        0.642565  0.451989  0.224864  0.450841  0.708547  0.033112  0.747126   
2        0.625107  0.180155  0.579956  0.352746  0.242640  0.342806  0.131956   

               y3        x4        y4  
shapeid                                
0        0.942829  0.462090  0.372599  
1        0.169423       NaN       NaN  
2        0.277638  0.143948  0.375779