【问题标题】:python compute new column value based on 2 other columns within looppython根据循环中的其他2列计算新列值
【发布时间】:2020-12-15 14:57:40
【问题描述】:

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

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 时,它可以工作......但是当我在我的实际代码中使用它时,在另一个嵌套循环中,代码仍然运行但 df['new'] 只有以前分配的'na' 值。

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

【问题讨论】:

    标签: python pandas zenhub


    【解决方案1】:

    这个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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2023-03-27
      • 2019-04-17
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多