2

У меня есть таблица, которая выглядит так:

Column A | Column B
      10 |      0.1
      10 |      0.2
      10 |      0.3
      20 |      0.4
      20 |      0.5
      20 |      0.6

Мне нужно транспонировать это, чтобы выглядеть так:

 10 | 20
0.1 | 0.4
0.2 | 0.5
0.3 | 0.6

Почти 2k разных значений в столбце A, для каждого есть ровно 1k значений в столбце B, которые могут повторяться.

Есть ли автоматизированный способ сделать это?

2 ответа2

1

Этот скрипт Python сделал свое дело:

import numpy as np

data = np.genfromtxt('inputcsv', delimiter=',')
keys = sorted(set(data[:,0]))

result = np.array([])

for k in keys:
    col = data[np.where(data[:,0] == k)][:,1]
    if not result.any():
        result = col
    else:
        result = np.vstack((result, col))
    print('key {0} finished'.format(k))

np.savetxt('final.csv', np.transpose(result), delimiter=',')
0

Я бы испек PHP-скрипт:

<?php
$file = fopen($argv[1], "r");
while(!feof($file)) {
    $line =  trim(fgets($file));
    if ($line=='') {continue;}
    $line = explode(' ', $line);
    $a[$line[0]] []= $line[1];
}
fclose($file);
foreach ($a as $k=>$v) {
    echo $k,"\t";
}
echo "\n";
$a = array_map(null, ...$a);
foreach($a as $b){
    echo implode("\t",$b),"\n";
}

Входной файл (разделенный табуляцией):

10      0.1
10      0.2
10      0.3
20      0.4
20      0.5
20      0.6
30      0.3
10      0.9

Команда:

php script inputfile

Вывод (через табуляцию):

10      20      30
0.1     0.4     0.3
0.2     0.5
0.3     0.6
0.9

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .