假設我有一個帶有Date列(datetime64[ns])的pandas df:
Date rows_num
0 202001-01 NaN
1 2020-02-25 NaN
2 2020-04-23 NaN
3 2020-06-28 NaN
4 202008-17 NaN
5 2020-10-11 NaN
6 2020-12-06 NaN
7 2021-26 7.
8 2021-03- 17 7.0
我想得到一列(上例中的rows_num),其中有我需要回溯的行數,以找到當前行日期減去365天(1年之前)。
因此,在上面的例子中,對于索引7(日期為2021-01-26),我想知道在我找到日期2020-01-26之前有多少行。
如果沒有完美的匹配(就像例子中的df),我應該參考最接近的可用日期(或者最接近的小/大日期:在我的例子中并不重要)。
有什么想法嗎?謝謝
uj5u.com熱心網友回復:
編輯以反映OP的原始問題。創建了一個演示資料框架。創建了一個列來保存row_count值,以反映營業日的數量。然后,對于每一行,創建一個過濾器來抓取從開始日期到365天之后的所有行。該過濾的資料框架的shape[0]代表營業日數,我們將其添加到df的適當欄位中。
# Import Pandas package
import pandas as pd
from datetime import datetime,timedelta
# 創建一個樣本資料框架。
df = pd. DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2】。]
'date' : ['2020-08-09', '2020-08-25', '2020-09-05',
'2020-09-12'/span>, '2020-09-29'/span>, '2020-10-15'/span>,
'2020-11-21', '2020-12-02', '2020-12-10',
'2020-12-18']})
#create the column for the row count:創建行數列。
df.insert(2, "row_count", ' ')
# 將日期轉換成datetime64。
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
for row in range(len(df['date'>])。
start_date = str(df['date'/span>].iloc[row])
end_date = str(df['date'].iloc[row] timedelta(days=365) #設定過濾器的結束日期。
#過濾兩個日期之間的資料'date'] >= start_date) & (df['date'] < end_date) ]
df['row_count'][row] = filtered_df.shape[0] # 在row_count列中填寫你的過濾器所回傳的行數。
uj5u.com熱心網友回復:
你可以使用pd.merge_asof,它執行你所描述的精確的最近匹配查找。你甚至可以選擇使用后向(較小的)、前向(較大的)或最近的搜索型別。
# setup
text = StringIO(
""
日期
2020-01-01
2020-02-25
2020-04-23
2020-06-28
2020-08-17
2020-10-11
2020-12-06
2021-01-26
2021-03-17
""
)
data = pd.read_csv(text, delim_whitespace=True, parse_dates=["Date"] )
# calculate the reference date from 1 year (365 days) ago。
one_year_ago = data["Date"] - pd.Timedelta("365D")
# 我們只關心原始和匹配日期的索引值。
merged = pd.merge_asof(
one_year_ago.reset_index(),
data.reset_index()。
on="Date",
suffixes=("_original", "_matched") 。
direction="backward"。
)
data["rows_num"] = merged["index_original"] - merged["index_matched"]
結果:
Date rows_num
0 202001-01 NaN
1 2020-02-25 NaN
2 2020-04-23 NaN
3 2020-06-28 NaN
4 202008-17 NaN
5 2020-10-11 NaN
6 2020-12-06 NaN
7 2021-26 7.
8 2021-03- 17 7.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310920.html
標籤:
