我正在开发一个包含成员资格开始和结束日期的数据集(例如,2003年12月3日和2007年10月23日),我正在尝试隔离每年的成员资格(在上面的示例中,我将寻找2003年, 2004,2005,2006,2007)。
现在我的代码只会识别第一年的会员资格,这没有用,因为我可以通过查看加入年份来获得。
year_list = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009]
for year in year_list:
mem_year_list = []
for x in dfy.join_year:
if x >= year | x < (year+1):
mem_year_list.append(1)
else:
mem_year_list.append(0)
我觉得我可能会错过一段时间的声明,但我无法弄明白,我不会惊讶地发现那不是缺失的部分。
数据从这样开始:
mem_no status animal join_year exp_year
00004 Active Lark 12-2-02 10-23-07
00101 Expired Parrot 4-1-03 2-1-16
00118 Crunchy Frog 10-8-01 2-22-02
00121 Grumpy Panda 5-1-03 3-1-04
最终看起来像这样:
mem_no status animal join_year exp_year mem_02 mem_03 mem_04 mem_05
00004 Active Lark 12-2-02 10-23-07 1 0 0 0
00101 Expired Parrot 4-1-03 2-1-16 0 1 0 0
00118 Crunchy Frog 10-8-01 2-22-02 1 0 0 0
00121 Grumpy Panda 5-1-03 3-1-04 0 1 0 0
但我希望它最终会像这样:
mem_no status animal join_year exp_year mem_02 mem_03 mem_04 mem_05
00004 Active Lark 12-2-02 10-23-07 1 1 1 1
00101 Expired Parrot 4-1-03 2-1-16 0 1 1 1
00118 Crunchy Frog 10-8-01 2-22-02 1 0 0 0
00121 Grumpy Panda 5-1-03 3-1-04 0 1 1 0
Roman给出了一个很好的答案,只需要几个调整:
dfy['joined'] = pd.to_datetime(dfy['joined'])
dfy['exp_date'] = pd.to_datetime(dfy['exp_date'])
year_list = [2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,\
2012, 2013, 2014, 2015]
for year in year_list:
# code to isolate prior years
dfy['mem_' + str(year)] = dfy.apply(lambda x: x['joined'].year\
<= year and x['exp_date'].year>= year, axis=1).astype('int')
# code to isolate current year
dfy['mem_2016'] = dfy.apply(lambda x: x['exp_date'].year\
<= 2016, axis=1).astype('int')
答案 0 :(得分:1)
>>> for year in year_list:
... dfy['mem_' + str(year)] = dfy.apply(lambda x: x['join'].year <= year and x['end'].year >= year, axis=1).astype('int')
>>> dfy
mem_no status animal join end mem_2002 mem_2003 mem_2004 mem_2005 mem_2006 mem_2007 mem_2008 mem_2009
0 4 Active Lark 2002-12-02 2007-10-23 1 1 1 1 1 1 0 0
1 101 Expired Parrot 2003-04-01 2016-02-01 0 1 1 1 1 1 1 1
2 118 Crunchy Frog 2001-10-08 2002-02-22 1 0 0 0 0 0 0 0
3 121 Grumpy Panda 2003-05-01 2004-03-01 0 1 1 0 0 0 0 0