Python 3.x 在python中,如何将每两行与一行中的两列连接起来?

Python 3.x 在python中,如何将每两行与一行中的两列连接起来?,python-3.x,transpose,Python 3.x,Transpose,我试图将每两行和两列合并到一列中 我有一个这样的数据,它存储在一个文本文件中 7.0 1042.3784354104064 1041.8736266399212 0.0 7.0 567.603384919274 566.8152346188947 0.0 8.0 709.5076838990026 709.3588638367074 0.0 8.0 386.811514883702 386.6412338380912 0.0 预期的输出将是这样的 1042.3784354104064 1041

我试图将每两行和两列合并到一列中

我有一个这样的数据,它存储在一个文本文件中

7.0 1042.3784354104064 1041.8736266399212 0.0
7.0 567.603384919274 566.8152346188947 0.0
8.0 709.5076838990026 709.3588638367074 0.0
8.0 386.811514883702 386.6412338380912 0.0
预期的输出将是这样的

1042.3784354104064 1041.8736266399212 567.603384919274 566.8152346188947
709.5076838990026 709.3588638367074 386.811514883702 386.6412338380912

下面的代码将转换列表列表,我相信这就是您所要求的。如果要删除某些行,可以修剪此
新的\u数据

raw_data = [[7.0, 1042.3784354104064, 1041.8736266399212, 0.0],
[7.0, 567.603384919274, 566.8152346188947, 0.0],
[8.0, 709.5076838990026, 709.3588638367074, 0.0],
[8.0, 386.811514883702, 386.6412338380912, 0.0]]

new_data = []
for i, data in enumerate(raw_data):
    for j, d in enumerate(data): 
        if(i==0):
            new_data.append([])
        new_data[j].append(d)

print(new_data)

您可以创建一个字典,将第一列值映射到列表,然后在遍历矩阵时填充这些列表:

from collections import defaultdict

matrix = [[7.0, 1042.3784354104064, 1041.8736266399212, 0.0],
[7.0, 567.603384919274, 566.8152346188947, 0.0],
[8.0, 709.5076838990026, 709.3588638367074, 0.0],
[8.0, 386.811514883702, 386.6412338380912, 0.0]]

dd = defaultdict(list)

for key, *values, discard in matrix:
    dd[key].extend(values)

result = list(dd.values())

print(result)
# [[1042.3784354104064, 1041.8736266399212, 567.603384919274, 566.8152346188947], 
#  [709.5076838990026, 709.3588638367074, 386.811514883702, 386.6412338380912]]
这是一个基于


这个数据是什么格式的?嵌套列表、熊猫数据帧、…?常规2D numpy阵列您的预期输出不是转置。看起来您想要将共享第一列的所有行,并将它们的第二列和第三列合并到一个列表中?是的,这就是我想要的。对不起,我想会是这样的transposing@PatrickHaugh从文本文件加载的2D numpy数组它可以工作,但我的原始数据存储在文本文件中。另一件事是输出打印第二行作为第一行,预期的第一行作为第二行one@HadeerZayat您要订什么?第一次出现文件中的键,按键排序,文件中的数据已经分组了?当我尝试您的代码时,它会给出以下输出“[709.5076838990026,709.3588638367074,386.811514883702,386.6412338380912]”,然后打印“[1042.3784354104064,1041.8736266399212,567.603384919274,566.8152346188947]”我需要它是#[1042.3784354104064,1041.8736266399212,567.603384919274,566.8152346188947],#[709.5076838990026,709.3588638367074386.811514883702,386.6412338380912]。@HadeerZayat我已经添加了一个纯numpy解决方案,它也应该保持秩序。
import numpy as np

mat = np.loadtxt('file.txt')

indices = np.cumsum(np.unique(mat[:, 0], return_counts=True)[1])[:-1]

result = np.array(np.split(mat[:, 1:-1], indices)).reshape((len(indices)+1, -1))
print(result)
# [[1042.37843541 1041.87362664  567.60338492  566.81523462]
#  [ 709.5076839   709.35886384  386.81151488  386.64123384]]