1

我有一个数组,格式如下:

564387.29   7371625.14  0.00    33030.00    -132.96 -1031.50

564387.29   7371625.14  0.00    1530.00     -133.85 -1039.27

564387.29   7371625.14  0.00    47970.00    -138.35 -1044.40

564387.32   7371625.14  0.00    47970.00    -166.41 -999.27

564387.32   7371625.14  0.00    33030.00    -241.74 -1889.71

564387.32   7371625.14  0.00    1530.00     -135.42 -857.31

564387.35   7371625.14  0.00    33030.00    -174.06 -990.66

564387.35   7371625.14  0.00    1530.00     -178.17 -927.11

564387.35   7371625.14  0.00    47970.00    -116.65 -1810.97

我将数组设为 pandas 数据框,并根据第 1、2 和 4 列对它们进行排序:

564387.29   7371625.14  0.00    1530.00     -133.85 -1039.27

564387.29   7371625.14  0.00    33030.00    -132.96 -1031.50

564387.29   7371625.14  0.00    47970.00    -138.35 -1044.40

564387.32   7371625.14  0.00    1530.00     -135.42 -857.31

564387.32   7371625.14  0.00    33030.00    -241.74 -1889.71

564387.32   7371625.14  0.00    47970.00    -166.41 -999.27

564387.35   7371625.14  0.00    1530.00     -178.17 -927.11

564387.35   7371625.14  0.00    33030.00    -174.06 -990.66

564387.35   7371625.14  0.00    47970.00    -116.65 -1810.97

最后一步是通过在 4 个附加列上添加变量来减少行数,以获得以下结果:

564387.29   7371625.14  0.00    1530.00 -133.85 -1039.27    -132.96 -1031.50    -138.35 -1044.40

564387.32   7371625.14  0.00    1530.00 -135.42 -857.31     -241.74 -1889.71    -166.41 -999.27

564387.35   7371625.14  0.00    1530.00 -178.17 -927.11     -174.06 -990.66     -116.65 -1810.97

但我似乎找不到办法——我看了很多 numpy 和 pandas 的讨论,但没有任何想法

4

2 回答 2

2
  1. 根据特定的列对其进行排序
  2. 将它们分组,然后应用我们的自定义功能

以下是示例:

In [121]: def func(df):
   .....:     df = df.reset_index(drop=True)
   .....:     s = [df.ix[0][3]]
   .....:     for index, rw in df.iterrows():
   .....:         s.append(rw[4])
   .....:         s.append(rw[5])
   .....:     return pd.Series(s)
   .....: 

In [122]: df.sort([0, 1, 3]).reset_index(drop=True).groupby([0, 1, 2]).apply(func)
Out[122]: 
                           0       1        2       3        4       5        6   
0         1          2                                                         
564387.29 7371625.14 0  1530 -133.85 -1039.27 -132.96 -1031.50 -138.35 -1044.40
564387.32 7371625.14 0  1530 -135.42  -857.31 -241.74 -1889.71 -166.41  -999.27
564387.35 7371625.14 0  1530 -178.17  -927.11 -174.06  -990.66 -116.65 -1810.97
于 2013-04-09T06:17:17.700 回答
0

@waitingkuo 谢谢,这会产生我想要的;我尝试将它与我的实际数据一起使用,需要将更多行转换为列(每个数据集总共 7 行,而在示例中只有 3 行),现在我得到了这种格式:

564387.29 7371625.14 0 0 1530.00000

                      1     -133.84641

                      2    -1039.27338

                      3     -133.48476

                      4    -1036.76991

                      5     -307.65603

                      6    -1747.01828

                      7     -132.95704

                      8    -1031.49587

                      9     -138.35364

                      10   -1044.39817

                      11    -119.70329

                      12    -981.84015

                      13     -89.65443

                      14    -919.83924

...

看起来一切都可以分组工作,然后行不会被附加......

于 2013-04-09T16:57:27.493 回答