2017-09-15 4 views
0

私は二重インデックス(曜日、時間)を持つデータフレームを持ち、インデックス日が休日のリストに属している場合、1に等しい新しい列「Holiday」を作成したい。タイプDatetimeIndexの休日のパンダの日付リストのダミー値を作成

マイリスト:

holidays = ['2017-09-11', '2017-12-24'] 

私の元データフレーム:

     Visitor 
Date  Time                
2017-09-11 4:45   0   
      5:00   1   
      5:15   26  
.... 
2017-09-12 4:45   0  
      5:00   1   
      5:15   26  
.... 

私が持っているしたいこと:ここで

     Visitor  Holiday 
Date  Time                
2017-09-11 4:45   0   1   
      5:00   1   1   
      5:15   26   1   
.... 
2017-09-12 4:45   0   0   
      5:00   1   0   
      5:15   26   0   
.... 

は私がベースを試みたものですon this previous answer

df['Holiday'] = int(df.index.get_level_values(0) in holidays == True) 
私のコラム 'ホリデー' は常に値0を持つしかし

...事前に

ありがとう! in演算子はスカラー値のために意味され、パンダのデータフレームで使用されるものではないことを

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

注:

答えて

1

使用isin

In [192]: df['Holiday'] = df.index.get_level_values(0).isin(holidays).astype(int) 

In [193]: df 
Out[193]: 
       Visitor Holiday 
Date  Time 
2017-09-11 4:45  0  1 
      5:00  1  1 
      5:15  26  1 
2017-09-12 4:45  0  0 
      5:00  1  0 
      5:15  26  0 

あなたがコピーをしたいの代わりに、df

In [196]: df.assign(Holiday=df.index.get_level_values(0).isin(holidays).astype(int)) 
Out[196]: 
       Visitor Holiday 
Date  Time 
2017-09-11 4:45  0  1 
      5:00  1  1 
      5:15  26  1 
2017-09-12 4:45  0  0 
      5:00  1  0 
      5:15  26  0 
+0

を変更する場合は、それはあなたがやったの前に文字通り秒投稿をあなたと同一の溶液を用いて、他の誰かに私だとない幸運。 ;-) –

+0

まあ、どこかでnp.whereがastype(int)と全く同じではないと思っています。明らかに私たちはどちらも独立してisin部分にありました。 – Zero

+0

ありがとうございました! – Batmax

1

あなたの現在のソリューションは、実際にValueErrorをスローする必要があります。 pandasには、代わりに、多くの条件付き演算子とビット演算子がオーバーロードされているほか、条件付き論理とブール論理のための包括的なAPIスイートがあります。


あなたはnp.whereisinを使用することができます。 get_level_valuesから日付レベルを取り、整数にブール値に変換するためにastype(int)を使用することにより

df['Holiday'] = np.where(df.index.get_level_values(0).isin(holidays), 1, 0) 
df 


       Visitor Holiday 
Date  Time     
2017-09-11 4:45  0  1 
      5:00  1  1 
      5:15  26  1 
2017-09-12 4:45  0  0 
      5:00  1  0 
      5:15  26  0 
関連する問題