メンバーシップの開始日と終了日(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
ローマは素晴らしい答えを出しました。 weaks:あなたが最初のリシェイプ用の周波数A
( '年')とpivot
で列join
とend
間のすべての値を見つけることができます
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'オブジェクトは属性 'year'"を持たず、インデックス0にu'occurredされています) – ajbentley
'join'と' end'カラムは日付ではありません(ifあなたは私に尋ねる:))。 'df ['join'] = pd.to_datetime(df ['join'])' –
実際の名前はjoin_yearとexp_year、fwiwですが、dtに変換しようとします。 – ajbentley