2016-09-05 2 views
2

Ich extrahiere Features, um nach den Wochentagen zu suchen. Was ich bisher habe, ist dies:Pandas Dataframe, Werte dem Wochentag zuweisen. Feature Extrahierung

days = {0:'Mon', 1: 'Tues', 2:'Wed', 3:'Thurs', 4:'Fri', 5:'Sat', 6:'Sun'} 
data['day_of_week'] = data['day_of_week'].apply(lambda x: days[x]) 
data['if_Weekday'] = np.where((data['day_of_week'] == 'Mon') | (data['day_of_week'] == 'Tues') | (data['day_of_week'] == 'Wed') | (data['day_of_week'] == 'Thurs') | (data['day_of_week'] == 'Friday'), '1', '0') 

Dieser Code wird Mo-Fr als 1 und Sa-So als 0 zuweisen. Ich möchte jedoch unterschiedliche Werte für die Wochentage zuweisen. Zum Beispiel Mon = 1, Di = 2, Mi = 3, Do = 4, Fr = 5 und Sa und So sollten beide gleich 0 sein.

Jede Hilfe wäre sehr willkommen.

Antwort

0

Ich denke, Sie können mask verwenden:

data = pd.DataFrame({'day_of_week':[0,1,2,3,4,5,6]}) 

#original column to new, add 1 
data['if_Weekday'] = data['day_of_week'] + 1 

#map days if necessary 
days = {0:'Mon', 1: 'Tues', 2:'Wed', 3:'Thurs', 4:'Fri', 5:'Sat', 6:'Sun'} 
data['day_of_week'] = data['day_of_week'].map(days) 

#correct weekend days 
data['if_Weekday'] = data['if_Weekday'].mask(data['if_Weekday'] >= 6, 0) 

print (data) 
    day_of_week if_Weekday 
0   Mon   1 
1  Tues   2 
2   Wed   3 
3  Thurs   4 
4   Fri   5 
5   Sat   0 
6   Sun   0 
+0

Vielen Dank für Ihre Antwort. Das hat mir sehr geholfen! – ALK

+0

Wenn meine oder eine andere Antwort hilfreich war, vergessen Sie [accept] (http://meta.stackexchange.com/a/5235/295067) nicht. Vielen Dank. Leider kann nur eine Antwort akzeptiert werden. – jezrael

0

OK Ich denke, die einfachste Sache hier ist np.where zu verwenden, um zu testen, ob der Wochentag größer oder gleich 5, und wenn ja 0 zuweisen, sonst gibt den Wert an Wochentagen und fügen 1 es:

In [21]: 
df['is_weekday'] = np.where(df['weekday'] >= 5, 0, df['weekday'] + 1) 
df 
Out[21]: 
     dates weekday is_weekday 
0 2016-01-01  4   5 
1 2016-01-02  5   0 
2 2016-01-03  6   0 
3 2016-01-04  0   1 
4 2016-01-05  1   2 
5 2016-01-06  2   3 
6 2016-01-07  3   4 
7 2016-01-08  4   5 
8 2016-01-09  5   0 
9 2016-01-10  6   0 
+0

Vielen Dank für Ihre Antwort. Gibt es jedoch keine Möglichkeit, das oben Genannte mit meinem anfänglichen Ansatz zu lösen? – ALK

+0

siehe überarbeitete Antwort – EdChum