函数将数据帧中的值作为参数

时间:2017-10-19 14:02:03

标签: python pandas dataframe

我有一个函数来计算给定年份的假期,如下所示:

holidays = bf.Holidays(year)

问题是,没有办法编辑Holidays函数,所以我需要另一种解决方案。

我有几年的数据名称,例如:

  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

但是我希望它计算非常数据帧行,而不仅仅是第一个

2 个答案:

答案 0 :(得分:0)

看起来你正在寻找pandas.DataFrame.apply

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

它会将函数bf.Holidays应用于df DataFrame中的每一行。

对于您问题中的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

答案 1 :(得分: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()函数实际返回一个列表,并且您希望将假日日期存储在每个假日的列中,而不是附加包含所有日期的单个列。