我在 Python 中有以下資料框:日期列采用時間戳格式。
| 日期 | 假日型別 | 姓名 | 其他 |
|---|---|---|---|
| 2022-01-01 00:00:00 | 假期 | 假期 1 | 英國 |
| 2022-01-02 00:00:00 | 假期 | 假期 2 | 英國 |
| 2022-03-08 00:00:00 | 假期 | 假期 3 | 英國 |
| 2022-04-12 00:00:00 | 假期 | 假期 4 | 英國 |
我想為這些指定日期前一天的記錄添加新行。生成的資料框將如下所示:
| 日期 | 假日型別 | 姓名 | 其他 |
|---|---|---|---|
| 2021-12-31 00:00:00 | 假期前 | (預) 假期 1 | 英國 |
| 2022-01-01 00:00:00 | 假期 | 假期 1 | 英國 |
| 2022-01-02 00:00:00 | 假期 | 假期 2 | 英國 |
| 2022-03-07 00:00:00 | 假期前 | (預) 假期 3 | 英國 |
| 2022-03-08 00:00:00 | 假期 | 假期 3 | 英國 |
| 2022-04-11 00:00:00 | 假期前 | (預)假期4 | 英國 |
| 2022-04-12 00:00:00 | 假期 | 假期 4 | 英國 |
例外情況是,如果前一天已經是假期,則不添加假期前。
我希望你能幫助我,謝謝。
uj5u.com熱心網友回復:
可能是一種更有效的方法,但我是這樣做的。
我創建了一個資料框,將您的日期偏移了一天。然后添加后綴'(Pre) '并將其更改holiday_type為'Pre Holiday'. 然后我將它附加到原始資料框,排序并洗掉重復的日期,保留最后一個條目。
import pandas as pd
cols = ['date','holiday_type','name','other']
data = [['2022-01-01 00:00:00', 'Holiday', 'Holiday 1', 'UK'],
['2022-01-02 00:00:00', 'Holiday', 'Holiday 2', 'UK'],
['2022-03-08 00:00:00', 'Holiday', 'Holiday 3', 'UK'],
['2022-04-12 00:00:00', 'Holiday', 'Holiday 4', 'UK']]
df = pd.DataFrame(data, columns=cols)
df['date'] = pd.to_datetime(df['date'])
df_yesterday = df[df['holiday_type'] == 'Holiday']
df_yesterday['date'] = df_yesterday['date'] pd.offsets.Day(-1)
df_yesterday['holiday_type'] = 'Pre Holiday'
df_yesterday['name'] = '(Pre) ' df_yesterday['name']
df = pd.concat([df, df_yesterday]).sort_values(['date', 'holiday_type'], ascending=[True, False]).reset_index(drop=True)
df = df.drop_duplicates(['date'], keep='last').reset_index(drop=True)
輸出:
print(df)
date holiday_type name other
0 2021-12-31 Pre Holiday (Pre) Holiday 1 UK
1 2022-01-01 Holiday Holiday 1 UK
2 2022-01-02 Holiday Holiday 2 UK
3 2022-03-07 Pre Holiday (Pre) Holiday 3 UK
4 2022-03-08 Holiday Holiday 3 UK
5 2022-04-11 Pre Holiday (Pre) Holiday 4 UK
6 2022-04-12 Holiday Holiday 4 UK
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/456821.html
上一篇:是否可以在針對子類的SHACL形狀中以不同的解析度定義時間?
下一篇:JS日期格式給出-1天
