Несколько реляционных таблиц во вложенный формат JSON с использованием Python - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь создать вложенный объект JSON путем объединения нескольких реляционных таблиц с использованием python / pandas.Я новичок в Python / pandas, поэтому ищу здесь некоторую помощь ...

В следующем примере вместо таблиц я использую файлы CSV, чтобы упростить задачу

Table1.csv

Emp_id, Пол, Возраст
1, M, 32
2, M, 35
3, F, 31

Table2.csv

Emp_id, Месяц, Стимул
1, август, 3000
1, сентябрь, 3500
1, октябрь, 2000
2, август, 1500
3, август, 5000
3, сентябрь, 2400

Я хочу создать объект JSON, как показано ниже

* Требуемый выход:

{
    "data": [{
        "employee": 1,
        "gender": M,
        "age": 32,
        "incentive": [{
            "aug": 3000,
            "sep": 3500,
            "oct": 2000
        }],
        "employee": 2,
        "gender": M,
        "age": 35,
        "incentive": [{
            "aug": 1500
        }],
        "employee": 3,
        "gender": F,
        "age": 31,
        "incentive": [{
            "aug": 5000,
            "sep": 2400
        }]
    }]
}

1 Ответ

0 голосов
/ 28 ноября 2018

Используйте merge сначала с левым соединением, затем groupby с лямбда-функцией для словарей и конвертируйте to_dict, последнее добавление сверху key значение и преобразовать в json:

d = (df1.merge(df2, on='Emp_id', how='left')
         .groupby(['Emp_id','Gender','Age'])['Month','Incentive']
         .apply(lambda x: [dict(x.values)])
         .reset_index(name='Incentive')
         .to_dict(orient='records')

)
#print (d)

import json
json = json.dumps({'data':d})

print (json)

{
    "data": [{
        "Emp_id": 1,
        "Gender": "M",
        "Age": 32,
        "Incentive": [{
            "Aug": 3000,
            "Sep": 3500,
            "Oct": 2000
        }]
    }, {
        "Emp_id": 2,
        "Gender": "M",
        "Age": 35,
        "Incentive": [{
            "Aug": 1500
        }]
    }, {
        "Emp_id": 3,
        "Gender": "F",
        "Age": 31,
        "Incentive": [{
            "Aug": 5000,
            "Sep": 2400
        }]
    }]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...