Python递归将pandas数据框转换为圆形包装json格式

时间:2018-06-29 19:10:24

标签: python pandas dataframe recursion hierarchical-data

我试图概括一个将pandas数据框和指定列转换为特定层次格式的函数。我能够使用硬编码层次结构中的级别数来进行转换,但是,为了将其更广泛地使用,我一直坚持对它应用递归。

理想情况下,我希望能够指定以下内容: _convert_df_to_hierarchy_dict(df, root_name, columns, attr_dict) 参数如下:

  • df =要使用的DataFrame
  • root_name =层次结构的根名称
  • columns =用于按所需顺序替换以下级别的列的列表
  • attr_dict = DataFrame列到最终叶子中的键的字典,因此在这种情况下,它可能类似于{“ hours_worked”:“ size”},其中hours_worked引用DataFrame列,并将该值作为最终对象中“尺寸”键的值

这里分别是3级转换和2级转换的工作代码:

3级

def _convert_df_to_hierarchical_dict_n3(df, root_name, level1, level2, level3, final_name, final_size):
    data_dict = {"name":root_name,"children":[]}
    for cat in df[level1].unique():
        tmp3 = {"name": str(cat),"children":[]}
        for cat2 in df[df[level1] == cat][level2].unique():
            tmp2 = {"name": str(cat2),"children":[]}
            for cat3 in df[(df[level1] == cat) & (df[level2] == cat2)][level3].unique():
                tmp = {"name":str(cat3), "children":[]}
                for _, row in df[(df[level1] == cat) & (df[level2] == cat2) & (df[level3] == cat3)][[final_name,final_size]].iterrows():
                    tmp["children"].append({"name":row[final_name], "size":row[final_size]})
                tmp2["children"].append(tmp)
            tmp3["children"].append(tmp2)
        data_dict["children"].append(tmp3)
    return(data_dict)

2级

def _convert_df_to_hierarchical_dict_n2(df, root_name, level1, level2, final_name, final_size):
    data_dict = {"name":root_name,"children":[]}
    for cat in df[level1].unique():
        tmp3 = {"name": str(cat),"children":[]}
        for cat2 in df[df[level1] == cat][level2].unique():
            tmp2 = {"name": str(cat2),"children":[]}
            for _, row in df[(df[level1] == cat) & (df[level2] == cat2)][[final_name,final_size]].iterrows():
                tmp2["children"].append({"name":row[final_name], "size":row[final_size]})
            tmp3["children"].append(tmp2)
        data_dict["children"].append(tmp3)
    return(data_dict)

当前变量的描述:

  • df =包含我们数据的熊猫数据框
  • root_name =要显示在层次结构最外面的名称
  • level1 =用作层次结构最外部组件的列
  • level2 =用作层次结构中第二最外层组件的列
  • level3 =用作层次结构中最外面的第三部分的列
  • final_name =用作最内部级别的“名称”值的数据框列
  • final_size =用作内部级别的“大小”值的数据框列

如果有人感兴趣,则转换是将数据放入表单以进行以下可视化:https://bl.ocks.org/mbostock/7607535

0 个答案:

没有答案