如何在python中将每2行和2列合并为一行?

时间:2019-04-12 19:18:19

标签: python-3.x transpose

我正在尝试将每2行和2列合并为一列。

我有这样的数据,并且存储在文本文件中

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

2 个答案:

答案 0 :(得分:1)

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

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]]

这是一个基于this answer

的纯粹的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]]

答案 1 :(得分:0)

以下代码将转置一个列表列表,我相信这是您要的内容。如果您要删除一些行,可以修剪此new_data

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)