[英]Pandas: Number of days elapsed since last occurrence
我看到問題是針對單個日期而不是一組不同的日期回答的:我想創建一個列來計算自 Pandas 中最后一次發生事件以來經過的天數。 我有一個包含具有以下結構的類似數據框的字典:
Vol Vol_lag Fed_meeting
Date
2005-06-02 72.9000 72.5000 0.0
2005-06-10 78.3000 72.9000 0.0
2005-06-16 76.0500 78.3000 0.0
2005-06-17 73.0500 76.0500 0.0
2005-06-24 75.7000 73.0500 0.0
... ... ... ...
2022-01-03 80.3288 77.8832 0.0
2022-01-04 83.1597 80.3288 0.0
2022-01-05 80.5131 83.1597 0.0
這是通過遍歷我的字典中的數據框獲得的,如下所示:
df = pd.read_excel(file, sheet_name=None, index_col="Date", parse_dates=True)
fed_df = pd.read_excel(fed_file, index_col="Date", parse_dates=True)
for key in df:
df[key]["Vol_lag"] = df[key]["Vol"].shift(1)
df[key] = pd.merge(df[key], fed_df, how='outer', left_index=True, right_index=True)
df[key].fillna(0, inplace=True)
“Fed_meeting”是一列,如果當天有美聯儲會議,則包含 1,如果沒有,則包含 0。 我想在每個數據框中添加一列“Days_elapsed”,用於計算自 Fed_meeting 上次等於 1 以來經過的天數(即,如果今天是美聯儲日,則等於 0,如果會議是昨天,則等於 1,等等上)。 我的數據已導入,因此 dataframe 的索引已經具有日期時間格式。
編輯添加:不幸的是,日期之間的間隔不規則(有時數據點之間有 1 周的間隔,但有時間隔是每天),因此代碼必須基於實際經過的天數,而不僅僅是數據的數量兩次會議之間的點。
編輯 2 : Fed_meeting 列已經是我原來的 dfs 和僅包含 Fed 會議日期的 fed_df 合並的產物。
非常感謝!
您可以使用asof
合並來獲得最近的美聯儲會議日期(過去),然后手動計算這些日期之間的天差。 asof
合並保證結果與left
DataFrame 的長度相同。
# So there are some Fed_meetings in the actual data
print(df)
Vol Vol_lag Fed_meeting
Date
2005-06-02 72.9000 72.5000 0.0
2005-06-10 78.3000 72.9000 0.0
2005-06-16 76.0500 78.3000 1.0
2005-06-17 73.0500 76.0500 0.0
2005-06-24 75.7000 73.0500 1.0
2022-01-03 80.3288 77.8832 0.0
2022-01-04 83.1597 80.3288 0.0
2022-01-05 80.5131 83.1597 1.0
import pandas as pd
meetings = df[df['Fed_meeting'].eq(1)].copy()
meetings['Prev_date'] = meetings.index
df = pd.merge_asof(df, meetings['Prev_date'],
left_index=True, right_index=True,
direction='backward')
df['Date_diff'] = df.index-df['Prev_date']
print(df)
Vol Vol_lag Fed_meeting Prev_date Date_diff
Date
2005-06-02 72.9000 72.5000 0.0 NaT NaT
2005-06-10 78.3000 72.9000 0.0 NaT NaT
2005-06-16 76.0500 78.3000 1.0 2005-06-16 0 days
2005-06-17 73.0500 76.0500 0.0 2005-06-16 1 days
2005-06-24 75.7000 73.0500 1.0 2005-06-24 0 days
2022-01-03 80.3288 77.8832 0.0 2005-06-24 6037 days
2022-01-04 83.1597 80.3288 0.0 2005-06-24 6038 days
2022-01-05 80.5131 83.1597 1.0 2022-01-05 0 days
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.