2017-10-19 72 views
-1

我有一個計算假期某一年這樣的功能:功能從數據幀取值作爲參數

holidays = bf.Holidays(year) 

的問題是,有沒有辦法來編輯假日功能,所以我需要另一個解決方案。

我有一些年datafame,例如:

year 
0 2005 
1 2011 
2 2015 
3 2017 

現在如果我這樣做:

yearX = year.get_value(0, 0) 

和運行

holidays = bf.Holidays(yearX) 

它只是計算假期數據框中的第一年(2005)

我怎樣才能實現這個功能應該採取每年並追加它?

使用for循環?

例如,它是如何工作的,現在:

year = df['YEAR'] 
    yearX = year.get_value(0,0) 
    holidays = bf.Holidays(year) 
    holidays = holidays.get_holiday_list() 
    print(holidays) 

輸出:

DATE         
2005-01-01 
2005-03-25 
2005-03-27 
2005-03-28 
2005-05-01 

,但我想它來計算很據幀行,不僅是第一個

+0

是的,for循環可能會有所幫助,但如果不知道自己的功能在做什麼,很難提供幫助。你能發表更多的細節(即功能和一個簡單的例子)嗎? – tnknepp

+0

@tnknepp我添加了一個示例 – Henrij

回答

0

看起來你」尋找pandas.DataFrame.apply

holidays = df.apply(bf.Holidays, axis=1) 

它將對您的df DataFrame中的每一行應用功能bf.Holidays


對於df從你的問題:

In [50]: df 
Out[50]: 
    year 
0 2010 
1 2011 
2 2015 
3 2017 

In [51]: def test(x): 
    ...:  return x % 13 
    ...: 

In [52]: df.apply(test, axis=1) 
Out[52]: 
    year 
0  8 
1  9 
2  0 
3  2 
+0

.apply默認工作在列上,所以傳遞軸= 1 –

+0

bf.Holidays需要一年的參數,該如何工作? – Henrij

+0

@Henrij因爲'.apply'將參數傳遞給它。考慮'def apply(f,val):return f(val)',但是'df.apply'對數據幀,列式或行式都適用 –

0

我覺得你可以按照this example,只是寫一個小包裝函數的日期返回各自的欄目:

def holiday_mapper(row): 
    holidays = bf.Holidays(row['year'],'HH').get_holiday_list() 
    row['holiday1'], row['holiday2']...row['holidayN'] = holidays 
    return row 

df = df.apply(holiday_mapper, axis=1) 

假設您的get_holiday_list()函數實際上會返回一個列表,並且您希望將假期日期存儲在每個假期的列中,那麼rath呃比添加所有日期的單個列。