首页 > 解决方案 > 将数据框与从应用函数创建的另一个数据框合并?

问题描述

我有一个df工资数据的数据框:

State,Annual Salary
New York, 132826
New Hampshire,128704
California,127388
Vermont,121599
Idaho,120011

还有一个函数,get_taxes_from_api它调用 API 并将输入的州和年薪的税号作为只有 1 行的数据框返回,如下所示:

State,annual.fica.amount,annual.federal.amount,annual.state.amount
North Carolina,8918,40334,6364

它是类型:<class 'pandas.core.frame.DataFrame'>不是系列。我想在 df 的每一行上调用 API,然后合并每个生成的 1 行数据帧。就像是:

State,Annual Salary,annual.fica.amount,annual.federal.amount,annual.state.amount
North Carolina, 116500,8918,40334,6364
New York, 132826, . . . 
New Hampshire,128704, . . . 
California,127388, . . . 
Vermont,121599, . . . 
Idaho,120011, . . . 

我该怎么做呢?我遇到了一个错误,我的 lambda 下面创建了一个系列而不是数据框,所以像这里'https://stackoverflow.com/a/62849468/2415706'一样使用 result_type=expand 进入了这个兔子洞,但它仍然坏了:

all_tax_df = df[['State','Annual Salary']].apply(lambda row: get_taxes_from_api(row['State'],row['Annual Salary']), axis=1, result_type='expand')


# merge all_tax_df with df on 'State'

标签: pythonpandasdataframemerge

解决方案


您只需将应用结果直接分配给新列即可:

df[["annual.fica.amount","annual.federal.amount","annual.state.amount"]]=( 
    df[['State','Annual Salary']].apply(lambda row: get_taxes_from_api(row['State'],row['Annual Salary']), axis=1)
)

如果您在一次调用 api 时获得整个数据帧(这可能更有效),那么合并将是一个好主意


推荐阅读