Как соединить каждые 2 строки с 2 столбцами в одной строке в Python? - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь объединить каждые 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 ]

1 голос
/ 12 апреля 2019

Вы можете создать словарь, отображающий значения вашего первого столбца в списки, а затем заполнять эти списки при выполнении итерации по матрице:

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

Вот простое решение на основе этого ответа

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]]
0 голосов
/ 12 апреля 2019

Следующий код транспонирует список списков, который, я полагаю, является тем, что вы просите.Вы можете обрезать это 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)
...