pandas dataframe

时间:2017-10-18 11:56:18

标签: python function pandas

这是我的代码:

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”的新列上。

2 个答案:

答案 0 :(得分:1)

自定义函数需要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

答案 1 :(得分:0)

非常感谢您的及时回复。你对我的问题的回答非常有帮助。

除此之外,我还需要将多个列名称传递给函数,这就是我的工作方式。

def yearCalc(年,月,n):

if year == 2016:
    print("year:{} month:{}".format(year, month))
    return year * month * n
else: 
    return year

df ['nv'] = df [['year','month']]。apply(lambda x:yearCalc(x ['year'],x ['month'],2),axis = 1 )

非常感谢。