Совсем аналогичный вопрос был задан there, и он был блестяще ответил пользователем1609452 в R. Тем не менее, это была конкретная проблема. Я хотел бы расширить вопрос. давайте возьмем почти ту же таблицу (MyData):pandas df in inested json
ID Location L_size L_color Station S_size S_color Category C_size C_color
1 Alpha 6 #000000 Zeta 3 #333333 Big 0.63 #306100
2 Alpha 6 #000000 Zeta 3 #333333 Medium 0.43 #458b00
3 Alpha 6 #000000 Zeta 3 #333333 small 0.47 #6aa232
4 Alpha 6 #000000 Yota 3 #4c4c4c Big 0.85 #306100
5 Alpha 6 #000000 Yota 3 #4c4c4c Medium 0.19 #458b00
6 Alpha 6 #000000 Yota 3 #4c4c4c small 0.89 #6aa232
7 Beta 6 #191919 Theta 4 #666666 Big 0.09 #306100
8 Beta 6 #191919 Theta 4 #666666 Medium 0.33 #458b00
9 Beta 6 #191919 Theta 4 #666666 small 0.79 #6aa232
10 Beta 6 #191919 Theta 4 #666666 Big 0.89 #306100
11 Beta 6 #191919 Meta 3 #7f7f7f Medium 0.71 #458b00
12 Beta 6 #191919 Meta 3 #7f7f7f small 0.59 #6aa232
Каждая категория имеет один или несколько атрибутов (здесь только один: размер). То, что я хотел, это чтобы сообщить размер для каждого из родителей/детей в файле JSon:
{
"name":"MyData",
"size":12,
"color":"#ffffff"
"children":[
{
"name":"Alpha",
"size":6,
"color":"#000000"
"children":[
{
"name":"Zeta",
"size":3,
"color":"#333333"
"children":[
{
"name":"Big",
"size":0.63,
"color":"#306100"
},
...
и т.д. я не мог сделать это в R, ни в панд ... Любая идея?
EDIT: Моя цель - связать разнообразную информацию с детьми, а не только размер. Я добавил колонку цветов для каждого основного столбца. Мой исходный фреймворк большой и содержит много информации, но я не могу вставить его здесь, ради ясности.
ВТОРОЙ РЕДАКТИРОВКА: Ответ на chrisb Он почти сработал! Отличное обновление. Тем не менее json-файл неправильно загружен в файл javascript. Файл, кажется, с ног на голову (MYDATA в конце), а также информацию от родителя до и после того, как дети информации:
{
"children":[
{
"color":"#000000",
"children":[
{
"color":"#4c4c4c",
"children":{
"color":"#306100",
"name":"Big",
"size":0.85
},
"name":"Yota",
"size":3
},
{
"color":"#333333",
"children":{
"color":"#306100",
"name":"Big",
"size":0.63
},
"name":"Zeta",
"size":3
}
],
"name":"Alpha",
"size":6
},
{
"color":"#191919",
"children":[
{
"color":"#7f7f7f",
"children":{
"color":"#458b00",
"name":"Medium",
"size":0.71
},
"name":"Meta",
"size":3
},
{
"color":"#666666",
"children":{
"color":"#306100",
"name":"Big",
"size":0.09
},
"name":"Theta",
"size":4
}
],
"name":"Beta",
"size":6
}
],
"name":"MyData",
"size":12
Последнее редактирование: Работает отлично. Крис снял последнюю часть сценария, который он написал, когда он обновил его, так что вот оно. Спасибо Крису!
data = {'name': 'MyData',
'size': len(MyData),
'children': make_children(MyData, levels)}
print json.dumps(data)
Thanks Chris. Вы нашли хороший способ избежать сценария R из приведенной выше ссылки. Мой пример не был достаточно хорош, так как ваш скрипт ловко взял размер от длины df. Я хотел иметь больше, чем просто размер ... Я отредактирую вопрос ... – Sara
Крис, я думаю, мы добираемся туда, но пока json действителен, он не загружается должным образом моим javascript. Посмотрите мое второе обновление. благодаря! – Sara
@Sara - JSON неупорядочен, так что это не проблема. Но все должно быть струнами. Попробуйте выполнить 'df = df.astype (str)' перед преобразованием в dict/JSON. – chrisb