Соберите для каждого уникального идентификатора все значения из CSV в Python - PullRequest
0 голосов
/ 24 октября 2018

У меня есть такой набор данных:

id,LON,LAT
00x1,2.17105,41.31353
00x1,1.935983,41.04712
00x2,-5.381285,36.11647
00x2,0.830717,42.19835
00x1,10.21912,43.51599

, и я хочу, чтобы каждый уникальный идентификатор собирал столбцы LAT, LON в форме (ожидаемый результат):

[00x1, [2.17105,41.31353], [1.935983,41.04712], [10.21912,43.51599]]
[00x2, [-5.381285,36.11647], [0.830717,42.19835]]

Пока мой код:

 df = pd.read_csv('/home/repos/master/testdat.csv')
 ids = []
 ids.append((df.as_matrix(columns=['id'])))
 #find unique ids
 unique_ids  =  np.unique(ids)
 coordinates = (df.as_matrix(columns=['LON', 'LAT']))

Доступ ко всем идентификаторам и координатам, но я не могу понять, как мне достичь ожидаемого результата.

Ответы [ 2 ]

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

С помощью Pandas можно объединить 2 серии в серию списков, объединить их с GroupBy, а затем использовать понимание списка.Дан фрейм данных df:

df['LON-LAT'] = list(map(list, zip(df['LON'], df['LAT'])))
grouped = df.groupby('id')['LON-LAT'].apply(list)

res = [[k, *v] for k, v in grouped.items()]

Результат:

[['00x1',
  [2.1710500000000001, 41.31353],
  [1.9359830000000002, 41.04712],
  [10.21912, 43.515990000000002]],
 ['00x2',
  [-5.3812850000000001, 36.11647],
  [0.83071700000000004, 42.198349999999998]]]
0 голосов
/ 24 октября 2018

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

import csv
d = {}
with open('testdat.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        d[row['id']] = d.get(row['id'], []) + [[row['LON'], row['LAT']]]
res = [[key] + value for key, value in d.items()]
print(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...