Как «инвертировать» данные в CSV-файле с массивом значений - PullRequest
0 голосов
/ 15 декабря 2018

Мой вопрос касается данных CSV / Excel.

У меня есть огромный список в CSV / Excel, где я хочу "инвертировать" данные из этого:

ArticleNO;Reference<br>
TRX82056-4;428030,426532,422992<br>
TRX82058-4;428030,426532,422992

К этому:

Reference,ArticleNO<br>
428030;TRX82056-4,TRX82058-4<br>
426532;TRX82056-4,TRX82058-4<br>
422992;TRX82056-4,TRX82058-4

Вместо «ArticleNO» в качестве базы и «Reference» в качестве массива совпадений, чтобы «Reference» в качестве базы и «ArticleNO в качестве массива совпадений»,

Есть ли кто-нибудь, кто знает, как это сделать? Может быть, в Excel или Python?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

Поскольку вы, кажется, не обладаете инструментом, вот способ сделать это в R:

library(tidyverse)
library(stringr)

df1 %>% mutate(Reference = strsplit(as.character(Reference),",")) %>% 
  unnest(Reference) %>% 
  group_by(Reference) %>% 
  summarize(ArticleNO = str_c(ArticleNO, collapse= ","))

# A tibble: 3 x 2
  Reference ArticleNO            
  <chr>     <chr>                
1 422992    TRX82056-4,TRX82058-4
2 426532    TRX82056-4,TRX82058-4
3 428030    TRX82056-4,TRX82058-4

Данные:

df1 <- structure(list(ArticleNO = c("TRX82056-4", "TRX82058-4"), Reference = c("428030,426532,422992", 
"428030,426532,422992")), row.names = c(NA, -2L), class = "data.frame")
0 голосов
/ 15 декабря 2018

Наивным подходом может быть обход списка ArticleNO и вложение обхода каждой ссылки внутри него.Я думаю, что это займет много времени.

поэтому

for all ArticleNo
    for all Reference 
       append reference to a new array
       scan the complete list for the reference and add the ArticleNO in another column.
       and also change the prev. checked entries to something else to avoid rescanning

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

0 голосов
/ 15 декабря 2018

Пришлось сделать это немного уродливо, потому что мне не хотелось создавать файл и записывать его в новый, но что-то подобное должно сделать это ..

>>> old = """ArticleNO;Reference<br>
... TRX82056-4;428030,426532,422992<br>
... TRX82058-4;428030,426532,422992"""
>>> lines = old.split('\n')
>>> for line in lines:
...    parts = line.split(';')
...    print(parts[1] + ';' + parts[0])
...    
Reference<br>;ArticleNO
428030,426532,422992<br>;TRX82056-4
428030,426532,422992;TRX82058-4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...