我正在處理包括成員資格開始和結束日期(例如,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)
我覺得我可能會丟失while語句,但我一直沒能弄明白,我也不會感到驚訝地發現,這是不缺少的部分。
數據像這樣開頭:
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給出了一個很好的答案,只需要幾個t weaks:
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')
感謝您發送此建議。不幸的是,它返回的AttributeError:(「'int'對象沒有屬性'年'','發生在索引0') – ajbentley
好吧,它看起來像你的'join'和'end'列不是日期你問我 :) )。所以你可以用'df ['join'] = pd.to_datetime(df ['join'])' –
將其轉換爲實際名稱join_year和exp_year,fwiw,但我會嘗試轉換爲dt。 – ajbentley