我有一個包含日期和價格的資料框(如下所示)。
df=pd.DataFrame({'date':['2015-01-01','2015-01-02','2015-01-03',
'2016-01-01','2016-01-02','2016-01-03',
'2017-01-01','2017-01-02','2017-01-03',
'2018-01-01','2018-01-02','2018-01-03'],
'price':[78,87,52,94,55,45,68,76,65,75,78,21]
})
df['date'] = pd.to_datetime(df['date'], errors='ignore', format='%Y%m%d')
select_dates = df.set_index(['date'])
我想選擇一系列特定日期以添加到新資料框中。例如,我想選擇 2015 年第一季度和 2016 年第一季度的價格。我為示例提供了較短時間段的資料,所以在這種情況下,我想選擇前 2 天2015 年和 2016 年的前兩天。
我想最終得到一個這樣的資料框(以日期為索引)。
| 日期 | 價格 |
|---|---|
| 2015-01-01 | 78 |
| 2015-01-02 | 87 |
| 2016-01-01 | 94 |
| 2016-01-02 | 55 |
我一直在使用這種方法選擇日期,但我不知道如何一次選擇多個范圍
select_dates2=select_dates.loc['2015-01-01':'2015-01-02']
uj5u.com熱心網友回復:
其他方式:
df['date'] = pd.to_datetime(df['date'])
df[df.date.dt.year.isin([2015, 2016]) & df.date.dt.day.lt(3)]
date price
0 2015-01-01 78
1 2015-01-02 87
3 2016-01-01 94
4 2016-01-02 55
uj5u.com熱心網友回復:
一種選擇是將索引作為日期物件的 MultiIndex 獲取;這允許在多個級別上進行相對簡單的選擇(在本例中為年和日):
(df
.assign(year = df.date.dt.year, day = df.date.dt.day)
.set_index(['year', 'day'])
.loc(axis = 0)[2015:2016, :2]
)
date price
year day
2015 1 2015-01-01 78
2 2015-01-02 87
2016 1 2016-01-01 94
2 2016-01-02 55
uj5u.com熱心網友回復:
一種選擇是使用dt訪問器選擇某些年份和月份日期,然后使用isin創建一個布爾掩碼來過濾df。
df['date'] = pd.to_datetime(df['date'])
out = df[df['date'].dt.year.isin([2015, 2016]) & df['date'].dt.strftime('%m-%d').isin(['01-01','01-02'])]
輸出:
date price
0 2015-01-01 78
1 2015-01-02 87
3 2016-01-01 94
4 2016-01-02 55
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464328.html
