python 根据循环内的其他 2 列计算新列值

python compute new column value based on 2 other columns within loop

我有一个如下所示的数据框:

issue_id       repo_id
101             10365
102             10543
103             11001  

df = pd.DataFrame({"issue_id":[101,102,103],"repo_id":[10365,10543,11001]})

我想遍历数据框,在每个索引中使用 issue_idrepo_id 的值从 API 请求数据,并将响应附加到新列.

这是我到目前为止所做的(适用于示例 df) 它将 zenhub api 的 get_issue_data 方法收到的有效负载分配给该索引处的 df['new']。

df['new'='na'
for i in df.index:
    df['new'][i]=zh.get_issue_data(df.repo_id[i],df.issue_id[i])['pipelines']

(zh 只是我用来从 zenhub 提取问题数据的 pyzenhub 库的名称空间)

当我将它用于上面提到的小样本 df 时,它有效...但是当我在我的实际代码中使用它时,在另一个嵌套循环中,代码仍然是 运行s 但 df['new'] 只有以前分配的值有 'na'。

我的问题是,我是否需要以不同的方式构造上述代码以使其在循环中正确 运行?

df['new'][i] = ... 是链式索引,不能保证有效。 this doc.

中有更多详细信息

你可以这样做:

# you don't need this
# df['new'] = 'na'

df['new'] = [zh.get_issue_data(repo_id, issue_id)['pipelines']
                for repo_id, issue_id in zip(df.repo_id, df.issue_id)]

或使用apply:

df['new'] = df.apply(lambda x: zh.get_issue_data(x.repo_id, x.issue_id)['pipelines'],
                     axis=1)