2017-12-27 6 views
0

Bietet Pandas (Python) eine Möglichkeit, die aktuelle Woche des Monats (1: 4) aus einer Datumsserie zu bekommen?Wochennummer des Monats

data = {'date': ['2014-05-01', '2014-05-01', '2014-05-02', '2014-05-02', '2014-05-02', '2014-05-02', '2014-05-03', '2014-05-03', '2014-05-04', '2014-05-04']} 
df = pd.DataFrame(data, columns = ['date']) 
df['date']=pd.to_datetime(df['date']) 

def week_of_month(dt): 
    """ Returns the week of the month for the specified date. 
    """ 
    first_day = dt.replace(day=1) 
    dom = dt.day 
    adjusted_dom = dom + first_day.weekday() 
    return int(ceil(adjusted_dom/7.0)) 


df ['week']=np.nan 
for i in range(len(df)): 
    df ['week'][i] = week_of_month(df.date.iloc[i]) 

mit einem kurzen Datensatz es funktioniert, aber mit einer großen Datenmenge nimmt zu vielen Ressourcen

+1

Sie bedeuten 1: 5, nicht wahr? –

+0

Ja, das meinte ich. [Link] (https://stackoverflow.com/questions/3806473/python-week-number-of-the-month) In diesem Beitrag gibt es die Antwort aber nur für ein bestimmtes Datum. –

+0

einige Orte beginnen die Woche mit Sonntag, andere mit Montag. – ShpielMeister

Antwort

0

Problem gelöst:

data = {'date_x': ['2014-05-01', '2014-05-01', '2014-05-02', '2014-05-02', '2014-05-02', '2014-05-02', '2014-05-03', '2014-05-03', '2014-05-04', '2014-05-04']} 
df = pd.DataFrame(data, columns = ['date_x']) 
df['date']=pd.to_datetime(df['date_x']) 

df['first_day_aux']=pd.to_datetime(df['date_x'][0][:8]+'01') 
df['day']=df['date'].dt.day 
df['adjusted_dom']=df['day']+df['first_day_aux'].dt.dayofweek 
df['week']=np.int_(np.ceil(df['adjusted_dom']/7.0)) 
Verwandte Themen