ฉันจะย้ายตารางด้วยค่าคีย์ที่ซ้ำกันได้อย่างไร


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 อย่างแน่นอนซึ่งอาจทำซ้ำ

มีวิธีอัตโนมัติในการทำเช่นนี้หรือไม่?


1
ใช้ PivotTable!
Eric F

1
คำถามที่คล้ายกันที่นี่: superuser.com/q/244507/76571 คุณอาจใช้โซลูชันที่นั่นและจากนั้นเพิ่มขั้นตอนการย้ายที่ง่ายไปยังจุดสิ้นสุดเพื่อรับสิ่งที่คุณต้องการ
Excellll

1
PivotTable ไม่ได้เก็บข้อมูลฉันสามารถแยกฟังก์ชั่นบางอย่างที่จะนำไปใช้กับคอลัมน์ทั้งหมด (ขั้นต่ำ, สูงสุด, ค่าเฉลี่ย, stddev, ผลรวม, ผลิตภัณฑ์ ฯลฯ )
RSFalcon7

ฉันพยายามvlookupแล้ว แต่พบเฉพาะค่าสุดท้ายของคอลัมน์ B สำหรับแต่ละค่าของคอลัมน์ A
RSFalcon7

1
@Excellll แน่นอนคำตอบเหล่านั้นจะแก้ปัญหาของฉัน แต่สคริปต์ VBA หรือโซลูชัน Google Spreadsheet ไม่สามารถจัดการปริมาณข้อมูลได้ พวกเขาขัดข้องกับข้อผิดพลาดของหน่วยความจำ (แม้ว่าฉันยังมีหน่วยความจำว่างมากมาย)
RSFalcon7

คำตอบ:


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=',')

คุณพบวิธีแก้ปัญหาสำหรับคุณแล้วมันยอดเยี่ยมมาก! ทำไมคุณไม่โพสต์ข้อความที่ตัดตอนมาของไฟล์อินพุตและเอาต์พุตสำหรับให้ทุกคนตรวจสอบ? และอย่าลืมรับคำตอบถ้ามันใช้ได้ผลสำหรับคุณ
simlev

เพราะตัวอย่างของอินพุตและเอาต์พุตอยู่ในคำถาม
RSFalcon7

ผมก็บอกคุณโพสต์ input และ output ไฟล์จริงเพราะผมพยายามทำงานสคริปต์กับการป้อนข้อมูลที่โพสต์ของคุณและให้ข้อผิดพลาด เห็นได้ชัดว่าสคริปต์คาดว่าอินพุต CSV ดังนั้นนี่คือรูปแบบการป้อนข้อมูลที่สอดคล้องกัน คุณพูดถึงว่ามีค่าคอลัมน์ A หลายพันค่าดังนั้นฉันจึงเพิ่มค่าเดียวและนี่คือข้อผิดพลาดที่ฉันได้รับ
simlev

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.