[英]in a pandas DF with 'season' (season1, season2...) columns, 6 months or ~182 days needs to be added to the last season that's not null
[英]Subsetting columns of months by season in pandas DataFrame
我有一組從 Excel 工作表中提取的數據。 其中一列是日期,因此我使用df.to_datetime()
重新格式化數據。 我的數據是每個月的第一天,字符串格式是:
“20190101”
所以只有12個日期。
然后我使用 pd.pivot 將這一列日期作為列標簽。 現在的計划是按季節對列進行子集化(例如,Jan、Feb、Dec 是冬季)。 我只有 2019 年的數據,但我將在未來幾年使用此代碼。 我將參加去年的 12 月,所以我需要忽略這些年。
如何根據月份對列進行子集化。 換句話說,我想將 DataFrame 划分為類似於:
for column in full_df.iterrows()
If (column_label.datetime.month = 01 | column_label.datetime.month = 02 |column_label.datetime.month = 12):
winter_df[datetime.month] = full_df[column_label]
我知道 for 循環在 Dataframe 中不受歡迎,並且我知道我可以通過將其保留為字符串並輸入特定字符串來對其進行硬編碼,但是數據不會每次都來自同一年,我將不得不進行調整每年的代碼。 如何為列標簽執行 if 語句? df.filter()
可能是個好主意,但我不知道它是否可能與 datetime 對象一起使用。
PS如果我的問題形成不當或我不明白你的答案,請原諒我。 對熊貓來說相當陌生。
更新:我希望根據月份將 DataFrame 分成三個,三個時間段如下: 冬季:一月、二月、十二月 輕載:三月、四月、五月 夏季:六月、七月 八月、九月
根據您的描述,這實現了您想要的
似乎有一種條件, pandas
可以給出錯誤的季度。 可以改為從月份的整數除法計算
df = df.assign(season=lambda x: x["Date"].apply(lambda s: ["winter","spring","summer","autumn"][(s.month-1)//3]))
import datetime as dt
import pandas as pd
import random
df = pd.DataFrame([{"Date":d, "Value": random.randint(10,20)}
for d in pd.date_range(dt.datetime(2018,1,1),dt.datetime(2019,3,1), freq="MS")])
df = df.assign(season=lambda x: x["Date"].apply(lambda s: ["winter","spring","summer","autumn"][s.quarter-1]))
df = df.set_index(["season","Date"]).T
輸出
season winter spring summer autumn winter
Date 2018-01-01 2018-02-01 2018-03-01 2018-04-01 2018-05-01 2018-06-01 2018-07-01 2018-08-01 2018-09-01 2018-10-01 2018-11-01 2018-12-01 2019-01-01 2019-02-01 2019-03-01
Value 10 20 12 17 12 12 11 20 11 19 12 10 11 20 14
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.