Группировка файла CSV по идентификатору и извлечение столбца JSON - PullRequest
0 голосов
/ 01 декабря 2018

У меня в настоящее время есть CSV, подобный этому:

A    B    C
1    10   {"a":"one","b":"two","c":"three"}
1    10   {"a":"four","b":"five","c":"six"}
1    10   {"a":"seven","b":"eight","c":"nine"}
1    10   {"a":"ten","b":"eleven","c":"twelve"}
2    10   {"a":"thirteen","b":"fourteen","c":"fifteen"}
2    10   {"a":"sixteen","b":"seventeen","c":"eighteen"}
2    10   {"a":"nineteen","b":"twenty","c":"twenty-one"}
3    10   {"a":"twenty-two","b":"twenty-three","c":"twenty-four"}
3    10   {"a":"twenty-five","b":"twenty-six","c":"twenty-seven"}
3    10   {"a":"twenty-eight","b":"twenty-nine","c":"thirty"}
3    10   {"a":"thirty-one","b":"thirty-two","c":"thirty-three"}

Я хочу сгруппировать по столбцу A, игнорировать столбец B и взять только поле "b" в C, и получить вывод наподобие:

A    C
1    ['two','five','eight','eleven']
2    ['fourteen','seventeen','twenty']
3    ['twenty-three','twenty-six','twenty-nine','thirty-two']

Могу ли я это сделать?У меня есть панды, если это будет полезно!Также я хотел бы, чтобы выходной файл был разделен табуляцией.

Ответы [ 2 ]

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

IIUC

df.groupby('A').C.apply(lambda x : [y['b'] for y in x ])
A
1                           [two, five, eight, eleven]
2                        [fourteen, seventeen, twenty]
3    [twenty-three, twenty-six, twenty-nine, thirty...
Name: C, dtype: object
0 голосов
/ 01 декабря 2018

Попробуйте:

import pandas as pd
import json

# read file that looks exactly as given above
df = pd.read_csv("file.csv", delim_whitespace=True)

# drop the 'B' column
del df['B']

# 'C' will start life as a string. convert from json, extract values, return as list
df['C'] = df['C'].map(lambda x: json.loads(x)['b'])

# 'C' now holds just the 'b' values. group these together: 
df = df.groupby('A').C.apply(lambda x : list(x))

print(df)

Возвращает:

A
1                           [two, five, eight, eleven]
2                        [fourteen, seventeen, twenty]
3    [twenty-three, twenty-six, twenty-nine, thirty...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...