2016-12-20 28 views
0

行我有大量的CSV文件行,這看起來像:串連基於數量(谷歌瑞風,Excel中/谷歌電子表格)

name a,1 
name b,1 
name c,1 
name d,2 
name e,2 

我需要連接基於數量的行。結果應該是:

name a|name b|name c 
name d|name e 

如何在Google Refine或Excel/Google Spreadsheet中執行此操作?

我在想它,但沒有解決方案。

非常感謝!

+0

是你確定這些是你唯一的兩個選擇?這將像Python中的10行。 – arkottke

+0

請你可以告訴我如何在Python中解決它。謝謝 – armando85

回答

0

這是一個開放式的提案。唯一Grel公式我使用的是:

row.record.cells['myColumn'].value.join('|') 

screencast

這裏是JSON,假設你的第一列被命名爲 「myColumn」,第二個 「數字」:

[ 
    { 
    "op": "core/column-addition", 
    "description": "Create column test at index 2 based on column number using expression grel:value", 
    "engineConfig": { 
     "mode": "row-based", 
     "facets": [ 
     { 
      "omitError": false, 
      "expression": "isBlank(value)", 
      "selectBlank": false, 
      "selection": [ 
      { 
       "v": { 
       "v": false, 
       "l": "false" 
       } 
      } 
      ], 
      "selectError": false, 
      "invert": false, 
      "name": "ee", 
      "omitBlank": false, 
      "type": "list", 
      "columnName": "ee" 
     } 
     ] 
    }, 
    "newColumnName": "test", 
    "columnInsertIndex": 2, 
    "baseColumnName": "number", 
    "expression": "grel:value", 
    "onError": "set-to-blank" 
    }, 
    { 
    "op": "core/column-move", 
    "description": "Move column test to position 0", 
    "columnName": "test", 
    "index": 0 
    }, 
    { 
    "op": "core/blank-down", 
    "description": "Blank down cells in column test", 
    "engineConfig": { 
     "mode": "row-based", 
     "facets": [ 
     { 
      "omitError": false, 
      "expression": "isBlank(value)", 
      "selectBlank": false, 
      "selection": [ 
      { 
       "v": { 
       "v": false, 
       "l": "false" 
       } 
      } 
      ], 
      "selectError": false, 
      "invert": false, 
      "name": "ee", 
      "omitBlank": false, 
      "type": "list", 
      "columnName": "ee" 
     } 
     ] 
    }, 
    "columnName": "test" 
    }, 
    { 
    "op": "core/column-addition", 
    "description": "Create column concatenation at index 2 based on column myColumn using expression grel:row.record.cells['myColumn'].value.join('|')", 
    "engineConfig": { 
     "mode": "row-based", 
     "facets": [ 
     { 
      "omitError": false, 
      "expression": "isBlank(value)", 
      "selectBlank": false, 
      "selection": [ 
      { 
       "v": { 
       "v": false, 
       "l": "false" 
       } 
      } 
      ], 
      "selectError": false, 
      "invert": false, 
      "name": "ee", 
      "omitBlank": false, 
      "type": "list", 
      "columnName": "ee" 
     } 
     ] 
    }, 
    "newColumnName": "concatenation", 
    "columnInsertIndex": 2, 
    "baseColumnName": "myColumn", 
    "expression": "grel:row.record.cells['myColumn'].value.join('|')", 
    "onError": "set-to-blank" 
    } 
] 
+1

非常感謝您的回覆。我希望從這個工具中學習。目前這種迴應非常有幫助 – armando85

0

如果您可以使用Python,那麼執行此操作將非常容易。在下面的代碼中,名稱和組從「input.csv」中讀取,分組的名稱(與組一起)被寫入「output.csv」。 A defaultdict用於創建空列表來存儲組成員。

import collections 
import csv 

grouped = collections.defaultdict(list) 
with open('input.csv') as fp: 
    reader = csv.reader(fp) 
    for row in reader: 
     name, group = row 
     grouped[group].append(name) 


with open('output.csv', 'w', newline='') as fp: 
    writer = csv.writer(fp, delimiter='|') 
    for key in sorted(grouped.keys()): 
     writer.writerow([key] + grouped[key])