Объединить повторяющиеся строки в CSV на основе ключа столбца первых - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь объединить 3 CSV с другой структурой, но общими полями. Я использую панду, чтобы сделать это.

У меня есть 3 CSV, как это:

csv1

sku;col1;col2;test
123;456;99;A
234;786;99;
345;678;99;A

csv2

sku;col3;col4;test
123;18-123;9999;A
234;18-786;9999;
345;12-678;9999;A

csv3

sku;col5;col6;test
123;18-123;9999;
234;18-786;9999;A
345;12-678;9999;

Мой сценарий такой:

#!/usr/bin/env python
import pandas as pd
import numpy as np

from functools import reduce

a = pd.read_csv("csv1.csv",sep =';', low_memory=False)
b = pd.read_csv("csv2.csv",sep =';', low_memory=False)

a = a.astype('object')
b = b.astype('object')

val = np.intersect1d(a.columns, b.columns).tolist()
merged = a.merge(b, on=val, how='outer')
merged.to_csv("csv1_2.csv",sep=';', index=False)

c = pd.read_csv("csv1_2.csv",sep =';', low_memory=False)
c = c.astype('object')
d = pd.read_csv("csv3.csv",sep =';', low_memory=False)
d = d.astype('object')

val = np.intersect1d(c.columns, d.columns).tolist()
merged = c.merge(d, on=val, how='outer')
merged.to_csv("csv1_2_3.csv",sep=';', index=False)

это просыпается, когда я получаю объединенный CSV, как это:

sku;col1;col2;test;col3;col4;col5;col6
123;456;99;A;18-123;9999;;
234;786;99;A;18-786;9999;18-786;9999
345;678;99;A;12-678;9999;;
123;;;;;;18-123;9999
345;;;;;;12-678;9999

но есть "дублирующаяся строка", и я хочу "объединить" строку с тем же самым sku, чтобы получить окончательный CSV как этот

sku;col1;col2;test;col3;col4;col5;col6
123;456;99;A;18-123;9999;18-123;9999
234;786;99;A;18-786;9999;18-786;9999
345;678;99;A;12-678;9999;12-678;9999

Есть ли у вас какие-либо подсказки, что делать рядом с строкой "слияния" по sku? Спасибо

1 Ответ

0 голосов
/ 29 августа 2018

Использование pd.concat()

df = pd.concat([pd.read_csv(x, sep=';', index_col='sku')
   ...:            for x in ['csv1', 'csv2', 'csv3']], axis=1)

df.loc[:,~df.columns.duplicated()]

     col1  col2 test    col3  col4    col5  col6
sku                                             
123   456    99    A  18-123  9999  18-123  9999
234   786    99    A  18-786  9999  18-786  9999
345   678    99    A  12-678  9999  12-678  9999
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...