簡體   English   中英

pandas 數據框上的用戶定義函數

[英]User defined function on pandas dataframe

這是我的代碼:

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

非常感謝您的及時回復。 你對我的問題的回答非常有幫助。

除此之外,我還需要將多個列名傳遞給函數,這就是我所做的。

def yearCalc(year,month,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)

非常感謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM