[英]How to group Pandas DataFrame dates into custom date range bins using groupby/cut
[英]Pandas: cut date column into period date groups/bins
我有一個 dataframe 如下:
df = pd.DataFrame({'Id': ['abs1', 'abs2', 'abs3', 'plo2', '201805', '201806', '202011', 'pctx1'],
'Date': ['2021-06-15', '2021-06-13', '2021-06-07', '2021-05-30',
'2021-05-12', '2021-04-28', '2021-04-15', '2021-02-01']})
我希望將Date列分成幾組在一個新列中,稱為Date_Bin,規則是:從今天開始,如果Date中的值小於7天,那么新列中的值將是'last 7 days',如果該值小於 14 天且大於 7 天,則該值為“7 到 14 天”,如果該值小於 30 天且大於 14 天,則該值為“14 到30 天,30 到 60 天、60 到 90 天和 90 天以上的邏輯相同。 理想的output是這樣的:
Id Date Date_Bin
0 abs1 2021-06-15 last 7 days
1 abs2 2021-06-13 last 7 days
2 abs3 2021-06-07 7 to 14 days
3 plo2 2021-05-30 14 to 30 days
4 201805 2021-05-10 30 to 60 days
5 201806 2021-04-28 30 to 60 days
6 202011 2021-04-15 60 to 90 days
7 pctx1 2021-02-01 more than 90 days
正如您所看到的 output,這些是我需要的數據的唯一組/箱。 我嘗試了幾種方法,但都沒有奏效,如果有人能提供幫助,我將不勝感激。
使用to_datetime
轉換您的日期,然后從今天的normalized
日期中減去(以便我們刪除時間部分)並獲得天數。 然后使用pd.cut
對它們進行適當的分組。
未來的任何東西都會被標記為NaN
。
import pandas as pd
import numpy as np
df['Date'] = pd.to_datetime(df['Date'])
s = (pd.to_datetime('today').normalize() - df['Date']).dt.days
df['Date_Bin'] = pd.cut(s, [0, 7, 14, 30, 60, 90, np.inf],
labels=['last 7 days', '7 to 14 days', '14 to 30 days',
'30 to 60 days', '60 to 90 days', 'more than 90 days'],
include_lowest=True)
print(df)
Id Date Date_Bin
0 abs1 2021-06-15 last 7 days
1 abs2 2021-06-13 last 7 days
2 abs3 2021-06-07 7 to 14 days
3 plo2 2021-05-30 14 to 30 days
4 201805 2021-05-12 30 to 60 days
5 201806 2021-04-28 30 to 60 days
6 202011 2021-04-15 60 to 90 days
7 pctx1 2021-02-01 more than 90 days
為了將來的可重復性,在撰寫本文時:
pd.to_datetime('today').normalize()
#Timestamp('2021-06-15 00:00:00')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.