2017-10-03 2 views
0

J'ai une base de données avec des données quotidiennes, pour plus de 3 ans. Je voudrais construire une autre base de données contenant les données des 5 derniers jours de chaque mois. Les lignes de la colonne 'date' serait dans ce cas (pour le nouveau dataframe construit):Sélectionner des données de jours spécifiques pour chaque mois dans une base de données

2013-01-27
2013-01-28
2013-01-29
2013-01 -30
2013-01-31
2013-02-23
2013-02-25
2013-02-26
2013-02-27
2013-02-28

Quelqu'un pourrait-il me dire comment je pourrais gérer cela?

Merci beaucoup!

Répondre

2

Une façon de le faire est de dt.day et dt.days_in_month avec indexation booléenne:

df = pd.DataFrame({'Date':pd.date_range('2010-01-01','2013-12-31',freq='D'), 
        'Value':np.random.rand(1461)}) 

df_out = df[df['Date'].dt.day > df['Date'].dt.days_in_month-5] 

print(df_out.head(20)) 

Sortie:

  Date  Value 
26 2010-01-27 0.097695 
27 2010-01-28 0.236572 
28 2010-01-29 0.910922 
29 2010-01-30 0.777657 
30 2010-01-31 0.943031 
54 2010-02-24 0.217144 
55 2010-02-25 0.970090 
56 2010-02-26 0.658967 
57 2010-02-27 0.189376 
58 2010-02-28 0.229299 
85 2010-03-27 0.986992 
86 2010-03-28 0.980633 
87 2010-03-29 0.258102 
88 2010-03-30 0.827310 
89 2010-03-31 0.813219 
115 2010-04-26 0.135519 
116 2010-04-27 0.263941 
117 2010-04-28 0.120624 
118 2010-04-29 0.993652 
119 2010-04-30 0.901466 
0

En supposant que votre colonne est nommé Date.

df.groupby([df.Date.dt.month,df.Date.dt.year]).apply(lambda x: x[-5:]).reset_index(drop=True).sort_values('Date')