我在两列中有一些点代码,我正在寻找它们之间的路径。 例如:
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'],... }
答案 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']}]