我有一个函数来计算给定年份的假期,如下所示:
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
但是我希望它计算非常数据帧行,而不仅仅是第一个
答案 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()
函数实际返回一个列表,并且您希望将假日日期存储在每个假日的列中,而不是附加包含所有日期的单个列。