这是我的代码:

dfnew=pd.DataFrame({ 'year': [2015,2016],
                      'month': [10, 12],
                      'day': [25,31]})
print(dfnew)

def calc(yy,n):

    if yy==2016:
        return yy*2*n
    else:
        return yy

dfnew['nv']=map(calc, dfnew['year'],2)
print(dfnew['nv'])


如何使此代码正确运行?我希望该函数仅适用于所有行的数据框的“年”列,并将输出存储在同一数据框的名为“ nv”的新列上。

最佳答案

需要apply来实现自定义功能:

dfnew['nv']= dfnew['year'].apply(lambda x: calc(x, 2))
print (dfnew)
   day  month  year    nv
0   25     10  2015  2015
1   31     12  2016  8064


最好使用mask来按条件更改值:

dfnew['nv']= dfnew['year'].mask(dfnew['year'] == 2016, dfnew['year'] * 2 * 2)
print (dfnew)
   day  month  year    nv
0   25     10  2015  2015
1   31     12  2016  8064


详情:

print (dfnew['year'] == 2016)
0    False
1     True
Name: year, dtype: bool

10-06 06:29