如何在Python中组合数字列数据?

如何在Python中组合数字列数据?,python,Python,我是Python的初学者,不知道如何执行以下操作: 我有一个数字数据的文本文件,格式如下: 1461.5 5 9 -18 32 1462 21 5 -6 32 1462 5 4 -23 32 1462.5 17 6 -7 30 1464 11 6 -14 31 1464 8 2 -22 32 1464.5 9 5 -17 31 1465 6 16 -7 29 1467 9 6 -17

我是Python的初学者,不知道如何执行以下操作:

我有一个数字数据的文本文件,格式如下:

1461.5 5 9 -18 32 1462 21 5 -6 32 1462 5 4 -23 32 1462.5 17 6 -7 30 1464 11 6 -14 31 1464 8 2 -22 32 1464.5 9 5 -17 31 1465 6 16 -7 29 1467 9 6 -17 32 1467.5 14 9 -8 31 1469.5 13 5 -12 30 1469.5 14 10 -7 31 1471 15 7 -9 31 1471 12 8 -10 30 1471.5 13 11 -7 31 1472 27 4 -1 32 1472 7 13 -8 28 1472 8 8 -14 30 1461.5 5 9 -18 32 1462 21 5 -6 32 1462 5 4 -23 32 1462.5 17 6 -7 30 1464 11 6 -14 31 1464 8 2 -22 32 1464.5 9 5 -17 31 1465 6 16 -7 29 1467 9 6 -17 32 1467.5 14 9 -8 31 1469.5 13 5 -12 30 1469.5 14 10 -7 31 1471 15 7 -9 31 1471 12 8 -10 30 1471.5 13 11 -7 31 1472 27 4 -1 32 1472 7 13 -8 28 1472 8 8 -14 30 我想了解如何识别第一列中具有相同值的行,在其他列中添加相应的项,并删除第一列中的重复项,以便生成如下输出:

1461.5 5 9 -18 32 1462 26 9 -29 64 1462.5 17 6 -7 30 1464 19 8 -36 63 1464.5 9 5 -17 31 1465 6 16 -7 29 1467 9 6 -17 32 1467.5 14 9 -8 31 1469.5 27 15 -19 61 1471 27 15 -19 61 1471.5 13 11 -7 31 1472 42 25 -23 90 1461.5 5 9 -18 32 1462 26 9 -29 64 1462.5 17 6 -7 30 1464 19 8 -36 63 1464.5 9 5 -17 31 1465 6 16 -7 29 1467 9 6 -17 32 1467.5 14 9 -8 31 1469.5 27 15 -19 61 1471 27 15 -19 61 1471.5 13 11 -7 31 1472 42 25 -23 90 如果这能让事情变得不那么复杂,那么第一列中的所有数字都可以提前四舍五入为整数(这对后续计算几乎没有影响)

注意:实际文本文件包含23000行。第一列中的值按升序排列

谢谢, 亚当

编辑:因为输入文件总是有序的,所以您可以做得更好

from itertools import groupby
with open("data.txt") as f:
    for k,v in groupby(f, key=lambda x:x.split()[0]):
        print k, map(sum, zip(*[map(int, x.split()[1:]) for x in v]))
编辑:因为输入文件总是有序的,所以您可以做得更好

from itertools import groupby
with open("data.txt") as f:
    for k,v in groupby(f, key=lambda x:x.split()[0]):
        print k, map(sum, zip(*[map(int, x.split()[1:]) for x in v]))
这项工作:

with open('data.txt') as data:
   d={}
   for row in data:
      l=row.split()
      key=l[0]
      l=[int(e) for e in l[1:]]
      if key in d:
         d[key]=[x+y for x,y in zip(l,d[key])]
      else:
         d[key]=l  

for e in sorted(d.keys()):
    t=tuple([e]+list(map(str,d[e])))
    print("{:<7} {:<3} {:<3} {:<3} {:<3}".format(*t))
这项工作:

with open('data.txt') as data:
   d={}
   for row in data:
      l=row.split()
      key=l[0]
      l=[int(e) for e in l[1:]]
      if key in d:
         d[key]=[x+y for x,y in zip(l,d[key])]
      else:
         d[key]=l  

for e in sorted(d.keys()):
    t=tuple([e]+list(map(str,d[e])))
    print("{:<7} {:<3} {:<3} {:<3} {:<3}".format(*t))
我强烈推荐这类工作的软件包

加载数据:

import io
import pandas as pd

data = """
1461.5  5   9   -18 32
1462    21  5   -6  32
1462    5   4   -23 32
1462.5  17  6   -7  30
1464    11  6   -14 31
1464    8   2   -22 32
1464.5  9   5   -17 31
1465    6   16  -7  29
1467    9   6   -17 32
1467.5  14  9   -8  31
1469.5  13  5   -12 30
1469.5  14  10  -7  31
1471    15  7   -9  31
1471    12  8   -10 30
1471.5  13  11  -7  31
1472    27  4   -1  32
1472    7   13  -8  28
1472    8   8   -14 30
"""

df = pd.read_csv(io.StringIO(data), sep=' *', engine='python', names=['a', 'b', 'c', 'd', 'e'])
df
数据帧现在包含示例数据:

df
Out[90]: 
         a   b   c   d   e
0   1461.5   5   9 -18  32
1   1462.0  21   5  -6  32
2   1462.0   5   4 -23  32
3   1462.5  17   6  -7  30
4   1464.0  11   6 -14  31
5   1464.0   8   2 -22  32
6   1464.5   9   5 -17  31
7   1465.0   6  16  -7  29
8   1467.0   9   6 -17  32
9   1467.5  14   9  -8  31
10  1469.5  13   5 -12  30
11  1469.5  14  10  -7  31
12  1471.0  15   7  -9  31
13  1471.0  12   8 -10  30
14  1471.5  13  11  -7  31
15  1472.0  27   4  -1  32
16  1472.0   7  13  -8  28
17  1472.0   8   8 -14  30
按第一列对该数据帧进行分组,并对所有其他列进行求和,这只是一行:

df2 = df.groupby('a').agg(sum).reset_index()
df2
Out[92]: 
         a   b   c   d   e
0   1461.5   5   9 -18  32
1   1462.0  26   9 -29  64
2   1462.5  17   6  -7  30
3   1464.0  19   8 -36  63
4   1464.5   9   5 -17  31
5   1465.0   6  16  -7  29
6   1467.0   9   6 -17  32
7   1467.5  14   9  -8  31
8   1469.5  27  15 -19  61
9   1471.0  27  15 -19  61
10  1471.5  13  11  -7  31
11  1472.0  42  25 -23  90
我强烈推荐这类工作的软件包

加载数据:

import io
import pandas as pd

data = """
1461.5  5   9   -18 32
1462    21  5   -6  32
1462    5   4   -23 32
1462.5  17  6   -7  30
1464    11  6   -14 31
1464    8   2   -22 32
1464.5  9   5   -17 31
1465    6   16  -7  29
1467    9   6   -17 32
1467.5  14  9   -8  31
1469.5  13  5   -12 30
1469.5  14  10  -7  31
1471    15  7   -9  31
1471    12  8   -10 30
1471.5  13  11  -7  31
1472    27  4   -1  32
1472    7   13  -8  28
1472    8   8   -14 30
"""

df = pd.read_csv(io.StringIO(data), sep=' *', engine='python', names=['a', 'b', 'c', 'd', 'e'])
df
数据帧现在包含示例数据:

df
Out[90]: 
         a   b   c   d   e
0   1461.5   5   9 -18  32
1   1462.0  21   5  -6  32
2   1462.0   5   4 -23  32
3   1462.5  17   6  -7  30
4   1464.0  11   6 -14  31
5   1464.0   8   2 -22  32
6   1464.5   9   5 -17  31
7   1465.0   6  16  -7  29
8   1467.0   9   6 -17  32
9   1467.5  14   9  -8  31
10  1469.5  13   5 -12  30
11  1469.5  14  10  -7  31
12  1471.0  15   7  -9  31
13  1471.0  12   8 -10  30
14  1471.5  13  11  -7  31
15  1472.0  27   4  -1  32
16  1472.0   7  13  -8  28
17  1472.0   8   8 -14  30
按第一列对该数据帧进行分组,并对所有其他列进行求和,这只是一行:

df2 = df.groupby('a').agg(sum).reset_index()
df2
Out[92]: 
         a   b   c   d   e
0   1461.5   5   9 -18  32
1   1462.0  26   9 -29  64
2   1462.5  17   6  -7  30
3   1464.0  19   8 -36  63
4   1464.5   9   5 -17  31
5   1465.0   6  16  -7  29
6   1467.0   9   6 -17  32
7   1467.5  14   9  -8  31
8   1469.5  27  15 -19  61
9   1471.0  27  15 -19  61
10  1471.5  13  11  -7  31
11  1472.0  42  25 -23  90

看看这个。。。谢谢阿瓦萨尔。我会研究这个问题的答案。看看这个。。。谢谢阿瓦萨尔。我会研究这个问题的答案。非常感谢。它起作用了,它给了我一些可以学习的东西。我有点像第一个例子中发生的事情。非常感谢。它起作用了,它给了我一些可以学习的东西。我有点像第一个例子中发生的那样。谢谢。这对我来说很有意义(我是初学者)。谢谢。这对我来说很有意义(我是初学者)。