J'ai un pandas DataFrame en Python avec deux colonnes indiquant les dates de début et de fin. Je veux:Trouve les plages de dates qui incluent le week-end en utilisant les pandas
- Compte tenu de deux pandas géants série comme début que les dates de fin en entrée ...
- déterminer, pour chaque paire de dates de début et de fin, si une date entre l'intervalle [début, fin) (c'est-à-dire incluant le début mais excluant la fin) est soit un vendredi ou un samedi ...
- Sortie d'une série pandas en tant que booléen.
- La solution devrait être relativement rapide que je travaille avec plus de 2M rangées.
L'ensemble de données ressemble:
start end
2013-08-02 2013-08-04
2014-11-24 2014-11-28
2013-10-29 2013-10-31
2013-12-06 2013-12-10
2014-08-15 2014-08-17
J'attendrai quelque chose comme:
has_weekend
TRUE
FALSE
FALSE
TRUE
TRUE
Mon approche actuelle est assez lent pour une trame de données qui a près de 2M lignes. Voici le code:
df.apply(lambda x: np.any(np.in1d([d.weekday() for d in pd.date_range(x.start, x.end)],[4,5])), axis=1)
Toutes les idées?
SOLUTION La solution la plus rapide était une réponse modifiée de
de @Anton VBrs = df.start.dt.dayofweek
e = df.end.dt.dayofweek
dt = (df.end- df.start).dt.days
has_weekend = (((s >= 4) & (s != 6)) | (e>=5) | ((e < s) & (s != 6)) | (dt >= 6))
Le manque de données dans votre question n'aide pas. –
@ cᴏʟᴅsᴘᴇᴇᴅ J'ai ajouté un extrait des données pour plus de clarté. – dandroid
Pour cette entrée, quelle est la valeur attendue? '0, 1, 3, 4'? –