我有一张如下所示的表格:
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
A 列中有近 2k 个不同的值,而每个值在 B 列中恰好有 1k 个值,这些值可能会重复。
有没有自动化的方法可以做到这一点?
答案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=',')
答案2
我会编写一个 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