1
votes

DataFrame: Comparez les dates de deux colonnes différentes

Comparez les dates de différentes colonnes le même jour.

df

            a                           b                       output
    0   2020-07-17 00:00:01.999    2020-07-17 12:00:01.999       True
    1   2020-06-15 13:14:01.999    2020-02-14 12:00:01.999       False
    2   2020-09-05 16:14:01.999    2020-09-05 11:59:01.999       True
    3   2020-11-17 23:14:01.999    2020-11-17 05:30:01.999       True

Résultat attendu

            a                           b      
    0   2020-07-17 00:00:01.999    2020-07-17 12:00:01.999
    1   2020-06-15 13:14:01.999    2020-02-14 12:00:01.999
    2   2020-09-05 16:14:01.999    2020-09-05 11:59:01.999
    3   2020-11-17 23:14:01.999    2020-11-17 05:30:01.999

Devrait je convertis les dates en chaîne (strf date) et les compare ou de toute autre manière?


0 commentaires

3 Réponses :


0
votes

Ce que vous avez est un horodatage, et pour en extraire la date, vous devez utiliser la méthode .date (), en supposant que le dataframe est df.

df['output'] = df.apply(lambda row: pd.Timestamp(row['a']).date() == pd.Timestamp(row['b']).date(), axis=1)

Si les colonnes 'a' et 'b 'sont des chaînes utilisées

df['output'] = df.apply(lambda row: row['a'].date() == row['b'].date(), axis=1)


0 commentaires

2
votes

Convertissez les objets datetime en objets datetime en utilisant pd.to_datetime ou en lisant depuis csv. Puis utilisez la fonction dt.date pour comparer les dates

In [22]: df = pd.read_csv("a.csv", parse_dates=["a","b"])

In [23]: df
Out[23]:
                        a                       b
0 2020-07-17 00:00:01.999 2020-07-17 12:00:01.999
1 2020-06-15 13:14:01.999 2020-02-14 12:00:01.999
2 2020-09-05 16:14:01.999 2020-09-05 11:59:01.999
3 2020-11-17 23:14:01.999 2020-11-17 05:30:01.999

In [24]: df["c"] = df["a"].dt.date == df["b"].dt.date

In [25]: df
Out[25]:
                        a                       b      c
0 2020-07-17 00:00:01.999 2020-07-17 12:00:01.999   True
1 2020-06-15 13:14:01.999 2020-02-14 12:00:01.999  False
2 2020-09-05 16:14:01.999 2020-09-05 11:59:01.999   True
3 2020-11-17 23:14:01.999 2020-11-17 05:30:01.999   True


0 commentaires

0
votes

Vous devez d'abord convertir vos colonnes en colonnes datetime en utilisant pd.to_datetime comme ci-dessous:

    a                           b                           output
0   2020-07-17 00:00:01.999    2020-07-17 12:00:01.999       True
1   2020-06-15 13:14:01.999    2020-02-14 12:00:01.999       False
2   2020-09-05 16:14:01.999    2020-09-05 11:59:01.999       True
3   2020-11-17 23:14:01.999    2020-11-17 05:30:01.999       True

Maintenant, utilisez np.where pour créer une nouvelle colonne en ne comparant que les dates: p >

import numpy as np
df['output'] = np.where(df['a'].dt.date == df['b'].dt.date, True, False)

Résultat:

df['a'] = pd.to_datetime(df['a'])
df['b'] = pd.to_datetime(df['b'])


3 commentaires

np.where semble un peu redondant.


@MateenUlhaq Pourquoi est-ce? np.where est assez bon pour de telles vérifications et à son tour pour créer une nouvelle colonne.


xs == np.where (xs, True, False) si xs.dtype == booléen