#json #pandas #transformation
#json #pandas #преобразование
Вопрос:
Предположим, у меня есть данные из фрейма данных со столбцами id
, title
, и category
, subcategory
, и sub-subcategory
это выглядит как:
_________________________________________________________________
| id | title | cat | subcat | subsubcat |
|____|______________|______________|_____________|______________|
| 1 | My Book | cat1 | subcat1 | subsubcat1 |
| 1 | My Book | cat2 | subcat2 | subsubcat2 |
| 2 | My Other Book| othercat1 | othersubcat1| othersubcat1 |
| 2 | My Other Book| othercat2 | othersubcat2| null |
| 2 | My Other Book| othercat3 | null | null |
|_______________________________________________________________|
Я хочу превратить это в (разделенный новой строкой) json, который имеет структуру, подобную:
[
{
'id' : '1',
'title' : 'My Book',
'categoryHiearchies': [
{'categories': ['category1', 'subcategory1', 'sub-subcategory1']},
{'categories': ['category2', 'subcategory2', 'sub-subcategory2']}
]
},
{
'id' : '2',
'title' : 'My Other Book',
'categoryHiearchies': [
{'categories': ['othercategory1', 'othersubcategory1', 'othersub-subcategory1']},
{'categories': ['othercategory2', 'othersubcategory2']},
{'categories': ['othercategory3']},
]
}
]
чтобы правильно загрузить его в BigQuery.
Есть идеи, как применить это преобразование?
Комментарии:
1. Во-первых, я думаю, что ваш вывод не является допустимым json. Во-вторых, это был ожидаемый результат, но как выглядят исходные данные, которые генерируют этот результат?
2. Я добавил, как выглядят входные данные, и думаю, что исправил структуру json. Это более понятно?
Ответ №1:
Предполагая null
Nan
, что значения:
(df.set_index(['id','title'],append=True).stack()
.groupby(level=[0,1,2]).agg(lambda x: {'categories':list(x)})
.groupby(level=[1,2]).agg(list)
.reset_index(name='categoryHiearchies')
.to_json(orient='records', indent=2)
)
что дает
[
{
"id":1,
"title":"My Book",
"categoryHiearchies":[
{
"categories":[
"cat1",
"subcat1",
"subsubcat1"
]
},
{
"categories":[
"cat2",
"subcat2",
"subsubcat2"
]
}
]
},
{
"id":2,
"title":"My Other Book",
"categoryHiearchies":[
{
"categories":[
"othercat1",
"othersubcat1",
"othersubcat1"
]
},
{
"categories":[
"othercat2",
"othersubcat2"
]
},
{
"categories":[
"othercat3"
]
}
]
}
]
Комментарии:
1. спасибо за очень хорошее решение. Вопрос: если мне нужно также создать другую структуру списка / записи внутри записи, как мне это сделать?
2. Я, честно говоря, не знаю, как на это ответить.
3. справедливо, ха-ха