我有一个名为“位置”的数据框,如下所示:
Home Number Workplace Number Year
A D 1998
B H 2001
C F 2012
D O 2005
我已经使用“家庭号码”创建了一个网络图。这里我想根据家庭网络计算家庭和工作场所之间的最小路径长度。对于给定的家庭和工作场所,我可以将它们插入以下函数:
def get_path_length(home_id, workplace_id):
if home_id in nodes:
try:
path_length = nx.shortest_path(G, source = home_id, target = workplace_id)
print(path_length)
except nx.NetworkXNoPath:
path_length = -8888
else:
path_length = -9999
return(path_length)
当我将相同的函数应用于数据帧中的每一行,然后将结果存储在名为“路径长度”的列中时,就会出现问题。我尝试了以下方法:
location_data = locations[['Home Number','Workplace Number']]
locations['Path Length'] = location_data.apply(get_path_length,axis=1)
但是我得到了一个错误:
TypeError: ("get_path_length() missing 1 required positional argument: 'Workplace Number'", 'occurred at index 0')
我还尝试迭代每一行:
for index, row in locations.iterrows():
locations[index,'Path Length'] = get_judge_path(row['Home Number'],row['Workplace Number'])
但随后出现错误:
ValueError: Length of values does not match length of index
有人知道如何解决这个问题吗?
最佳答案
您可以在 lambda 函数中传递 2 列:
f = lambda x: get_path_length(x['Home Number'], x['Workplace Number'])
locations['Path Length'] = locations.apply(f, axis=1)
关于python - 无法将函数输出分配给列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56161367/