Как объединить строки с одинаковыми идентификаторами в нескольких файлах TSV в Python? - PullRequest
0 голосов
/ 24 сентября 2018

у меня три tsv файла с именами;file1.tsv, file2.tsv и file3.tsv

Три файла tsv имеют следующие имена столбцов:

  • ID
  • Комментарий

Теперь я хочу создать файл tsv, в котором каждый идентификатор получает объединенную строку 'комментария', проверяя три файла.

Например;

file1.tsv
ID            Comment
Anne Smith    Comment 1 of Anne smith
Peter Smith   Comment 1 of peter smith

file2.tsv
ID            Comment
John Cena     Comment 2 of john cena
Peter Smith   Comment 2 of peter smith

file3.tsv
ID            Comment
John Cena     Comment 3 of john cena
Peter Smith   Comment 3 of peter smith

Файл результатов долженбыть;

results.tsv
ID            Comment
Anne Smith    Comment 1 of Anne smith
John Cena     Comment 2 of john cena. Comment 3 of john cena.
Peter Smith   Comment 1 of peter smith. Comment 2 of peter smith. Comment 3 of peter smith

Я новичок в панде.Просто интересно, можем ли мы использовать Pandas или любую другую подходящую библиотеку для выполнения конкатенации, а не писать с нуля.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Вы можете просто использовать функцию Pandas read_csv, но с аргументом sep, установленным на \t.

Если вы используете это для всех трех файлов TSV, выдолжно в конечном итоге три кадра данных.Затем вы можете использовать функцию merge, чтобы комбинировать их по своему желанию.

0 голосов
/ 24 сентября 2018

, чтобы еще больше расширить ответ Вэна, последний цикл не очень панд, но он работает ...

file1 = '''ID\tComment
Anne Smith\tComment 1 of Anne smith
Peter Smith\tComment 1 of peter smith
'''
file2 = '''ID\tComment
John Cena\tComment 2 of john cena
Peter Smith\tComment 2 of peter smith
'''

file3 = '''ID\tComment
John Cena\tComment 3 of john cena
Peter Smith\tComment 3 of peter smith
'''

flist=[]
for r in [file1,file2,file3]:
  fname=r+'.tsv'
  with open(fname,'w') as f:
    f.write(r)
  flist.append(fname)

import pandas as pd

dflist=[]
for fname in flist:
  df=pd.read_csv(fname,delimiter='\t')
  dflist.append(df)

grouped=pd.concat(dflist).groupby('ID')

data=[]
for row in grouped:
  data.append({'ID':row[0],'Comments':'. '.join(row[1].Comment)}) 

pd.DataFrame(data,columns=['ID','Comments']).to_csv('concat.tsv',sep='\t',index=False)
0 голосов
/ 24 сентября 2018

Предполагая, что вы читаете свой TSV в df1, df2, df3

df=pd.concat([df1,df2,df2]).groupby('ID').Comment.apply('. '.join)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...