Verileri ayıklayın ve tarihe göre sıralayın

0

Soru

Dize manipülasyonu ve sıralama üzerine bir alıştırma yapmaya çalışıyorum. Alıştırma, metinden zaman referansı olan sözcükleri (örneğin, saatler, günler) çıkarmayı ve satırları artan bir sırada çıkarılan zamana göre sıralamayı ister. Bir veri örneği şöyledir:

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            

Bu görevde birkaç zorluk tespit edebilirim:

- 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

İlk noktada, genellikle tarihlerin daha önce olduğunu, mevcut olup olmadığını, bu yüzden onları çıkarmanın kolay olabileceğini belirttim. İkinci noktada, bir ıf deyimi eksik / eksik alanlar nedeniyle hata iletilerinden kaçınabilir. Yine de üçüncü noktaya nasıl cevap vereceğimi bilmiyorum.

Beklenen sonucum şöyle olurdu:

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

En iyi cevabı

1

DataFrame örneği göz önüne alındığında, bu alıştırma için metnin ilk iki kelimesinin peşinde olduğunuz şey olduğunu varsayacağım. Sıralamanın nasıl çalıştığı konusunda net değilim, ancak üçüncü nokta için daha uygun bir zaman olacaktır current time - timedelta metin sütunundan

Her satırın ilk iki kelimesine bir if-else lambda işlevi uygulayabilirsiniz. Text ve bunu bir pandalar Timedelta nesnesine dönüştürün - örneğin pd.Timedelta("1 day") bir Timedelta nesnesi döndürür.

Ardından, Timedelta sütununu şu anki saatten çıkartabilirsiniz 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"]

Çıktı:

>>> 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

Diğer dillerde

Bu sayfa diğer dillerde

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