Extraire les données et de les trier par date

0

La question

Je suis à essayer de comprendre un exercice de manipulation de chaînes et de tri. L'exercice demande à extraire les mots qui ont le temps de référence (par exemple, des heures, des jours) à partir du texte et de trier les lignes en fonction de l'heure de l'extrait dans un ordre ascendant. Un exemple de données est:

Customer     Text
1            12 hours ago — the customer applied for a discount
2            6 hours ago — the customer contacted the customer service
3            1 day ago — the customer reported an issue
4            1 day ago — no answer
4            2 days ago — Open issue
5            

Dans cette tâche, j'ai peut identifier plusieurs difficultés:

- time reference can be expressed as hours/days/weeks
- there are null values or no reference to time
- get a time format suitable and more general, e.g., based on the current datetime

Sur le premier point, j'ai constaté que, généralement, les dates sont avant, si présent, de sorte qu'il pourrait être facile de les extraire. Sur le second point, une instruction if peut éviter les messages d'erreur due à incomplet ou manquant champs. Je ne sais pas comment répondre au troisième point, cependant.

Mon résultat escompté serait:

Customer     Text                                                        Sort by
1            12 hours ago — the customer applied for a discount             1
2            6 hours ago — the customer contacted the customer service      2
3            1 day ago — the customer reported an issue                     2
4            1 day ago — no answer                                          2
4            2 days ago — Open issue                                        3
5            
data-manipulation pandas python
2021-11-24 01:46:37
1

La meilleure réponse

1

Compte tenu de la DataFrame exemple, je vais supposer que, pour cet exercice, les deux premiers mots du texte sont ce que vous êtes après. Je suis pas clair sur la façon dont le tri fonctionne, mais, pour le troisième point, un moment plus approprié serait le current time - timedelta à partir de la colonne de Texte

Vous pouvez appliquer un if-else fonction lambda pour les deux premiers mots de chaque ligne de Text et de convertir cette pandas Timedelta l'objet - par exemple pd.Timedelta("1 day") sera de retour d'une Timedelta objet.

Ensuite, vous pouvez soustraire le Timedelta colonne de l'heure actuelle que vous pouvez obtenir avec pd.Timestamp.now():

df["Timedelta"] = df.Text.apply(lambda x: pd.Timedelta(' '.join(x.split(" ")[:2])) if pd.notnull(x) else x)
df["Time"] = pd.Timestamp.now() - df["Timedelta"]

Sortie:

>>> df
   Customer                                               Text       Timedelta                       Time
0         1  12 hours ago — the customer applied for a disc... 0 days 12:00:00 2021-11-23 09:22:40.691768
1         2  6 hours ago — the customer contacted the custo... 0 days 06:00:00 2021-11-23 15:22:40.691768
2         3         1 day ago — the customer reported an issue 1 days 00:00:00 2021-11-22 21:22:40.691768
3         4                              1 day ago — no answer 1 days 00:00:00 2021-11-22 21:22:40.691768
4         4                            2 days ago — Open issue 2 days 00:00:00 2021-11-21 21:22:40.691768
5         5                                                NaN             NaT                        NaT
2021-11-24 18:34:53

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................