使用列表将循环输出保存到Python中的字典中

时间:2018-01-16 12:01:07

标签: python pandas dictionary dataframe

我在两列中有一些点代码,我正在寻找它们之间的路径。 例如:

COL_A         COL_B
B1011         B1012
B1012         B1014
B1013         B2017
B1014         B1018
...
B1018         B2022

对于他们每个人,我需要从第一个到最后一个(没有破坏)的路径。例如,对于B1011,它将是B1012,B1014,B1018,...... B2022。 我编写了一个遍历所有值的代码并将其放入列表中,但在该版本中我需要输入点代码的字符串。 现在我需要自动化它并返回字典作为输出。 例如 {'B1011':['B1012','B1014','B1018',......'B2022'],...}

我的代码:

list_for_output = []
def func_top(x,num):
    for i in range(len(x[x.COL_A==num])):
        list_for_output.append(x[x.COL_A==num]['COL_B'].iloc[i])
    for i in range(len(x[x.COL_A==num])):
        if x[x.COL_A==list_for_output[-(i+1)]].empty == True:
            return
        else:
            func_top(x,list_for_output[-(i+1)])
            return

如何在表单中为字典添加输出:{COL_A:list_for_output}为数据帧中的每一行? 谢谢。 期望的输出:

    {'B1011' : ['B1012', 'B1014', 'B1018', ...'B2022'], 
     'B1012': ['B1014', 'B1018', ...'B2022'], 
     'B1014':['B1018', ...'B2022'],
     'B1013':['B2017'],... }

2 个答案:

答案 0 :(得分:2)

尝试修改此代码

import pandas as pd
from collections import defaultdict

df = pd.DataFrame({'COL_A': ['B1011','B1012','B1013','B1014','B1015','B1018'],
                  'COL_B': ['B1012','B1014','B2017','B1018','B2021','B2022']})

a= df.groupby(['COL_A']).apply(lambda grp: grp.COL_B.to_dict()).to_dict()
print (a)

结果

{'B1011': {0: 'B1012'}, 'B1012': {1: 'B1014'}, 'B1013': {2: 'B2017'}, 'B1014': {3: 'B1018'}, 'B1015': {4: 'B2021'}, 'B1018': {5: 'B2022'}}

答案 1 :(得分:0)

这不是确切的解决方案,但它只是一个给你指路的例子。

使用递归方法:

import pandas as pd
from collections import defaultdict

df = pd.DataFrame({'COL_A': ['B1011','B1012','B1013','B1014','B1015','B1018'],
                  'COL_B': ['B1012','B1014','B2017','B1018','B2021','B2022']})

a=[i for i in df['COL_A']]
b=[i for i in df['COL_B']]

final_result=[]
def main_function(bn):
    dict_1={}


    path = []

    if not bn:
        return 0
    else:
        value_2 = []
        def hello(a_, b_, c):



            if not c:
                return 0
            else:

                aa = a_[c[0]]


                bb = b_[c[0]]

                if bb in a_:
                    value = []
                    value.append(aa)
                    if bb not in path:
                        path.append(bb)
                    bn = a_.index(bb)

                    cn = b_[bn]

                    if cn not in path:
                        path.append(cn)

                    value_2.extend(value)





                    return hello(a_, b_, c[1:])


                else:

                    if "{}".format({aa:bb}) not in final_result:
                        final_result.append("{}".format({aa:bb}))


                    return hello(a_, b_, c[1:])

        hello(a, b, bn)
        if path:
            dict_1[value_2[0]]=path
            if dict_1 not in final_result:
                final_result.append(dict_1)

        main_function(bn[1:])

main_function(list(range(0,len(a))))

print(final_result)

根据需要格式化结果。

输出:

["{'B1013': 'B2017'}", "{'B1015': 'B2021'}", "{'B1018': 'B2022'}", {'B1011': ['B1012', 'B1014', 'B1018', 'B2022']}, {'B1012': ['B1014', 'B1018', 'B2022']}, {'B1014': ['B1018', 'B2022']}]