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_id
和 repo_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)
我有一个如下所示的数据框:
issue_id repo_id
101 10365
102 10543
103 11001
df = pd.DataFrame({"issue_id":[101,102,103],"repo_id":[10365,10543,11001]})
我想遍历数据框,在每个索引中使用 issue_id
和 repo_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)