2017-01-01 8 views
1

1)我稱WEEKDAY_LIST一個列表變量是由由逗號分隔 例如串話:weekday_list = ['Monday', 'Tuesday', 'Wednesday']Python的數據幀:查找如果列值在變量列表和標籤因此

2)I也有另一個類似的所謂weekend_list 例如數組變量:weekend_list = ['Saturday', 'Sunday']

比方說,我有以下數據框:

Date Day_of_Week    
1/5  Monday   
1/6  Tuesday   
1/7  Wednesday 
1/8  Thursday  
1/9  Friday 
1/10 Saturday  
1/11 Sunday 

我想這樣做有以下Python代碼:

一)創建一個名爲「標籤」的新欄,上面寫着「工作日」,如果在列「DAY_OF_WEEK」的值在變量WEEKDAY_LIST

B)說:「週末」如果列中的值「DAY_OF_WEEK」是在可變weekend_list

c)中最後說NA如果在列「DAY_OF_WEEK」的值是在既不可變

*任何幫助感激

回答

1

假設你使用pandas,有幾種不同的方式來做到這一點。這是一個直觀的選項。它的工作方式:使用.isin()方法創建一個邏輯索引,以指示在DAY_OF_WEEK處於WEEKDAY_LISTweekend_list或既不,然後用.loc存取相應地更新標籤柱:

import numpy as np 
df["Label"] = np.nan 
df.loc[df.Day_of_Week.isin(weekday_list), "Label"] = "weekday" 
df.loc[df.Day_of_Week.isin(weekend_list), "Label"] = "weekend" 

enter image description here


另一條班輪的選擇將是我們Ënp.where

df["Label"] = np.where(df.Day_of_Week.isin(weekday_list), "weekday", 
         np.where(df.Day_of_Week.isin(weekend_list), "weekend", 
           None)) 
+1

它的工作!謝謝 :) – PineNuts0

1

您可以創建一個label_dict來代替,而pd.Series.map

label_dict = {} 
for wd in weekday_list: 
    label_dict[wd] = 'weekday' 
for we in weekend_list: 
    label_dict[we] = 'weekend' 

df.Day_of_Week.map(label_dict) 

0 weekday 
1 weekday 
2 weekday 
3  NaN 
4  NaN 
5 weekend 
6 weekend 
Name: Day_of_Week, dtype: object