一、目标
使用python的pandas模块,利用groupby功能,将多列数据 库表转为树状children结构,用于echarts的树状展示。
二、数据库
(一)使用sqlite3的数据库,建表及插入字段语句如下:
DROP TABLE if exists t_层级数据;
-- 创建层级数据表
CREATE TABLE t_层级数据(
id integer primary key autoincrement,
name1 text,
name2 text,
name3 text,
name4 text,
post text
)
INSERT INTO t_层级数据(name1,name2,name3,name4) values('a','b','c','d1');
INSERT INTO t_层级数据(name1,name2,name3,name4) values('a','b','c','d');
INSERT INTO t_层级数据(name1,name2,name3,name4) values('a1','b','c','d1');
INSERT INTO t_层级数据(name1,name2,name3,name4) values('a1','b1','c1','d1');
INSERT INTO t_层级数据(name1,name2,name3,name4) values('a','b1','c1','d');
INSERT INTO t_层级数据(name1,name2,name3,name4) values('a','b1','c','d1');
(二)使用pandas读取文件
import pandas as pd
import sqlite3
file = "层级数据.db"
con = sqlite3.connect(file)
sql_str = "select * from t_层级数据 limit 6"
df = pd.read_sql(sql=sql_str,con=con)
三、使用pandas
(一)python程序
g_1=[]
for g_1_name,g_1_df in df.groupby('name1'):
g_2=[]
for g_2_name,g_2_df in g_1_df.groupby('name2'):
g_3=[]
for g_3_name,g_3_df in g_2_df.groupby('name3'):
g_4 = []
for g_4_name,g_4_df in g_3_df.groupby('name4'):
print(g_4_df)
g_4.append({'name':g_4_name,'id':g_4_df['id'].values[0]})
# print(g_4)
g_3.append({'name':g_3_name,'children':g_4})
# print(g_3)
g_2.append({'name':g_2_name,'children':g_3})
# print(g_2)
g_1.append({'name':g_1_name,'children':g_2})
print(g_1)