python - 无法将函数输出分配给列

标签 python pandas

我有一个名为“位置”的数据框,如下所示:

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/

相关文章:

python - Pandas :如何创建年周变量?

python - 如何使用 pandas DataFrame 计算列表字典?

python - 从python中的2个列表中创建一个重复元素列表

python - 将函数应用于数据框

python - 如何在多索引数据帧上同时执行两个切片?

python - 无法让正则表达式捕获最后一组

python - 是否有类似的 pandas/numpy 函数与 dplyr 中的 group_by Lead/lag 和 ifelse 语句类似?

Python,如何合并2个pandas DataFrame

python - 获取两个列表列表或空列表的交集

python - 当类的对象在不带任何括号的情况下输入并运行时,如何在 Python REPL 或 Jupyter Notebook 中打印该对象