pandas 对具有索引的 Dataframe 使用apply函数时输出NaN值

zdwk9cvp  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(174)

我正在尝试使用应用函数来创建2个新列。当dataframe有索引时,它不工作,新列的值为NaN。如果dataframe没有索引,那么它工作。您能帮忙吗?谢谢

def calc_test(row):

    a=row['col1']+row['col2']
    b=row['col1']/row['col2']
    return (a,b)

df_test_dict={'col1':[1,2,3,4,5],'col2':[10,20,30,40,50]}
df_test=pd.DataFrame(df_test_dict)
df_test.index=['a1','b1','c1','d1','e1']
df_test

    col1    col2
a1  1   10
b1  2   20
c1  3   30
d1  4   40
e1  5   50

现在我使用apply函数,新创建的列的值为NaN。谢谢你的帮助。

df_test[['a','b']] = pd.DataFrame(df_test.apply(lambda row:calc_test(row),axis=1).tolist())
df_test

col1    col2    a   b
a1  1   10  NaN NaN
b1  2   20  NaN NaN
c1  3   30  NaN NaN
d1  4   40  NaN NaN
e1  5   50  NaN Na
r7xajy2e

r7xajy2e1#

当使用apply时,您可以使用result_type ='expand'参数将函数的输出扩展为panda Dataframe的列:

df_test[['a','b']]=df_test.apply(lambda row:calc_test(row),axis=1, result_type ='expand')

这将返回:

col1    col2    a   b
a1  1   10  11.0    0.1
b1  2   20  22.0    0.1
c1  3   30  33.0    0.1
d1  4   40  44.0    0.1
e1  5   50  55.0    0.1
yhqotfr8

yhqotfr82#

您正在将apply的返回值 Package 为DataFrame,该DataFrame的默认索引为[0, 1, 2, 3, 4],它在原始DataFrame的索引中不存在。您可以通过查看pd.DataFrame(df_test.apply(lambda row:calc_test(row),axis=1).tolist())的输出来查看这一点。
只需删除pd.DataFrame()即可解决此问题。
df_test[['a', 'b']] = df_test.apply(lambda row:calc_test(row),axis=1).tolist()

相关问题