Использование Python / Pandas для слияния строк, имеющих одинаковые значения, но объединяющих данные, отличные от одной строки - PullRequest
0 голосов
/ 19 апреля 2019

Я копался в переполнении стека, пытаясь решить проблему, я всегда близко, но я не понимаю, что мне нужно.(это общий CSV-файл, я сделал для примера) что-то. CSV

lastName, firstName, address, tool, description
Franks, James, 321 Hammond, hammer, "It hammers"
Franks, James, 321 Hammond, nails, "It Nails stuff"
Phiilips, Tom, 773 James St, mower, "It mows"
Phiilips, Tom, 773 James St, weed-wacker, "It whacks"}

Я пытаюсь объединить строки в словарь, где они читают что-то вроде этого

Franks: [(hammer, "It hammers"), (nails, "It Nails stuff")]
Phiilips: [(mower, "It mows"),  (weed-wacker, "It whacks")]

Мне интересно, если это дажевозможно, или я просто слишком усложняю ...

Это то, что я пробовал до сих пор

df3 = pd.read_csv("results.csv", encoding="utf-8", skipinitialspace=True)
df3.groupby("lastname")[["tool","description"]].apply(lambda g: list(map(tuple, g.values.tolist()))).to_dict()

Результаты:

{Franks: [("hammer", "It hammers"), ("nails", "It Nails stuff")]}
{Franks: [("hammer", "It hammers"), ("nails", "It Nails stuff")]}
{Phiilips:[("mower", "It mows"), ("weed-wacker", "It whacks")]}
{Phiilips:[("mower", "It mows"), ("weed-wacker", "It whacks")]}

Недостаточно хорошо, чтобы понять, почему я получаю повторяющиеся строки, но я стремлюсь к чему-то вроде этого без повторяющихся строк.

1 Ответ

1 голос
/ 19 апреля 2019

Вы можете использовать модуль csv и его DictReader.

import csv
from collections import defaultdict

dd = defaultdict(list)
with open('results.csv', 'r') as fin:
    reader = csv.DictReader(fin)
    for row in reader:
        dd[row['lastName']].append((row['tool'], row['description']))

Выход:

defaultdict(list,
        {'Franks': [('hammer', 'It hammers'), ('nails', 'It Nails stuff')],
         'Phiilips': [('mower', 'It mows'), ('weed-wacker', 'It whacks')]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...