我有一個名為的資料集df,如下所示:
| 提供者 | 菲德 | PID | 約會時間 |
|---|---|---|---|
| CHE-223 | 2bfc9a62 | 2f43d557 | 2021-09-26T23:18:00 |
| CHE-223 | fff669e9 | 295b82e2 | 2021-08-13T09:10:00 |
我想創建一個名為的新表wave,該表具有日期范圍的分類值datetime。例如,對于從 2019 年 11 月 16 日到 2020 年 2 月 28 日的日期,它給出了 covid 之前的值,依此類推。
我使用回圈函式來實作這一點,這是我使用的代碼:
def wave(row):
if (row["datetime"] <= pd.Timestamp("2019-11-16")) & (row["datetime"] >= pd.Timestamp("2020-02-28")):
wave="before covid"
elif (row["datetime"] <= pd.Timestamp("2020-03-01")) & (row["datetime"] >= pd.Timestamp("2020-06-15")):
wave="1st wave"
elif (row["datetime"] <= pd.Timestamp("2020-06-16")) & (row["datetime"] >= pd.Timestamp("2020-09-30")):
wave="between waves"
elif (row["datetime"] <= pd.Timestamp("2020-10-01")) & (row["datetime"] >= pd.Timestamp("2021-01-15")):
wave="2nd wave"
df["wave"]=df.apply(lambda row:wave(row),axis=1)
但它給了我一個名為但沒有值的列。wave我該如何解決這個問題并對日期進行分類?
uj5u.com熱心網友回復:
你的函式需要回傳一些東西。您的日期比較也是倒置的:
(row["datetime"] <= pd.Timestamp("2019-11-16")) & (row["datetime"] >= pd.Timestamp("2020-02-28"))
將匹配2019 年 11 月 16 日之前和 2020 年 2 月 28 日之后的日期......這當然不會發生。
您的函式應如下所示:
def wave(row):
wave = ""
if (row["datetime"] >= pd.Timestamp("2019-11-16")) and (row["datetime"] <= pd.Timestamp("2020-02-28")):
wave="before covid"
elif (row["datetime"] >= pd.Timestamp("2020-03-01")) and (row["datetime"] <= pd.Timestamp("2020-06-15")):
wave="1st wave"
elif (row["datetime"] >= pd.Timestamp("2020-06-16")) and (row["datetime"] <= pd.Timestamp("2020-09-30")):
wave="between waves"
elif (row["datetime"] >= pd.Timestamp("2020-10-01")) and (row["datetime"] <= pd.Timestamp("2021-01-15")):
wave="2nd wave"
elif (row["datetime"] >= pd.Timestamp("2021-01-16")):
wave="after second wave"
return wave
編輯:也是&按位運算子。對于邏輯運算式,請使用and.
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/465576.html
標籤:Python 熊猫 数据框 蟒蛇日期时间 python-dateutil
上一篇:如何創建按組匯總行的列
