2016-06-13 4 views
1

Итак, у меня есть так называемый dataframe pandas.Python: обновить Dict, используя данные из фрейма данных pandas

  mac_address   City 
0 00:03:7f:05:c0:06  Kolkata 
1 00:08:22:1c:50:07 Bhubaneswar 
2 00:08:22:1c:50:07  Mumbai 
3 00:08:22:1c:50:07  Mumbai 
4 00:08:22:1c:50:07  Kolkata 
5 00:08:22:24:cc:fb Bhubaneswar 
6 00:08:22:24:f8:02  Mumbai 
7 00:08:22:24:f8:02  Kolkata 
8 00:08:22:24:f8:02  Mumbai 
9 00:08:22:24:f8:02 Bhubaneswar 

Теперь уникальный ключ здесь mac_address поэтому я хочу начать с пустым документом JSON. для этого я начну со словаря в python, который позже я могу сбросить в JSON. Я не знаю, как начать с пустого dict (вы тоже можете помочь с этим), поэтому я начал с одного значения. Теперь для каждой новой строки фрейма данных, если mac_address, который также является индексом dict, если mac_id обновляет соответствующий город и город. И если он отсутствует, добавьте новое поле (если оно называется полем) с индексом в качестве нового mac_address и сохраните значение соответственно. Это словарь, с которого нужно начинать.

data = {"00:08:22:24:f8:02": { 
       "mac_address" : "00:08:22:24:f8:02", 
       "cities" : 
         [ 
         {'name': 'Bhubaneswar', 'count': 12}, 
         {'name': 'Kolkata', 'count': 4}, 
         {'name': 'Mumbai', 'count': 6} 
        ] 
     } 

    } 

город город нет. раз, когда mac_address посещал город. Читая эту конкретную строку, я хотел бы обновить город, названный Бхубанешвар и графа 1.

Update Вопрос здесь заключается в том, как обновить словарь непосредственно из строки кадра данных по строкам. Который мне почему-то не удалось объяснить. Это обновление может помочь людям понять.

+3

Что вопрос в конце концов? Вы должны [свести к минимуму свой пример] (http://stackoverflow.com/help/mcve) и указать, что вы уже сделали – DomTomCat

+1

@DomTomCat обновил вопрос, теперь он может быть более понятным. –

+0

@DomTomCat любое обновление или помощь? –

ответ

1

вы можете построить свой словарь, который может быть сохранен как файл JSON как это:

In [129]: %paste 
(df.groupby(['mac_address','City']) 
    .size() 
    .reset_index() 
    .rename(columns={'City':'name',0:'count'}) 
    .groupby('mac_address') 
    .apply(lambda x: {'mac_address':x.name, 'cities': x[['name','count']].to_dict('r')}) 
    .to_dict() 
) 
## -- End pasted text -- 
Out[129]: 
{'00:03:7f:05:c0:06': {'cities': [{'count': 1, 'name': 'Kolkata'}], 
    'mac_address': '00:03:7f:05:c0:06'}, 
'00:08:22:1c:50:07': {'cities': [{'count': 1, 'name': 'Bhubaneswar'}, 
    {'count': 1, 'name': 'Kolkata'}, 
    {'count': 2, 'name': 'Mumbai'}], 
    'mac_address': '00:08:22:1c:50:07'}, 
'00:08:22:24:cc:fb': {'cities': [{'count': 1, 'name': 'Bhubaneswar'}], 
    'mac_address': '00:08:22:24:cc:fb'}, 
'00:08:22:24:f8:02': {'cities': [{'count': 1, 'name': 'Bhubaneswar'}, 
    {'count': 1, 'name': 'Kolkata'}, 
    {'count': 2, 'name': 'Mumbai'}], 
    'mac_address': '00:08:22:24:f8:02'}} 

В отношении к обновлению вложенных полей в Монго DB, см этот вопрос и ответы: MongoDB - Update objects in a document's array (nested updating)

+0

Основная проблема заключается в проверке наличия mac_address или нет и добавлении нового mac_address и обновления соответственно, который, вероятно, не решен в этом ответе. –

+0

@ Danran, IMO, это не очень удобно хранить ваши данные в формате JSON, если вы хотите обновить его. Можете ли вы хранить данные как HDFStore? Зачем вам JSON в этом случае - используете ли вы Mongo DB в качестве бэкэнд? – MaxU

+0

Да, используется Mongo DB. И да, также будет добавлено много feild, это всего лишь один пример: - посещение и посещение, посещение в отпуск или выходные или обычный рабочий день. Теперь мне нужно выяснить, как вызвать индекс, который является mac_address и соответствующим образом обновить. –

Смежные вопросы