我一直盯著這個方法太久了,我想我已經失去了理智,它真的不應該像我做的那么復雜。
我有一個df:
| 日期1 | 日期2 |
|---|---|
| 2022-04-01 | 2022-06-17 |
| 2022-04-15 | 2022-04-15 |
| 2022-03-03 | 鈉鹽 |
| 2022-04-22 | 鈉鹽 |
| 2022-05-06 | 2022-06-06 |
我想填充“Date2”中的空白,如果存在“Date2”的值,它會保留“Date2”的值,但如果“Date2”是 NaT,那么我希望它是“Date1”的下個月的最后一個日期。
在上面的示例中,2 個 NaT 欄位將變為:
| 日期1 | 日期2 |
|---|---|
| 2022-03-03 | 2022-04-30 |
| 2022-04-22 | 2022-05-31 |
我知道我必須使用 .fillna 而我最接近的是:
df['Date2'] = (df['Date2'].fillna((df['Date1'] pd.DateOffset(months=1)).replace)).to_numpy().astype('datetime64[M]')
這將回傳該月的第一天。但是,它會為所有行(不僅僅是 NaT 行)回傳月份的第一天,并且它回傳的是當月的第一天,而不是最后一個月。
我很確定我的括號搞砸了,我嘗試了許多不同的組合 - timedelta 和類似的。
我在這里做錯了什么?蒂亞!
uj5u.com熱心網友回復:
鑒于提供的示例,您的問題可以用兩種方式解釋。
下一行日期 1 的月底(現在似乎不是您想要的)
你需要使用pd.offses.MonthEnd和shift
df['Date2'] = (df['Date2']
.fillna(df['Date1'].add(pd.offsets.MonthEnd())
.shift(-1))
)
下個月末(同一行)
如果您想要同一行的下個月末:
df['Date2'] = (df['Date2']
.fillna(df['Date1'].add(pd.offsets.MonthEnd(2)))
)
輸出:
Date1 Date2
0 2022-04-01 2022-06-17
1 2022-04-15 2022-04-15
2 2022-03-03 2022-04-30
3 2022-04-22 2022-05-31
4 2022-05-06 2022-06-06
uj5u.com熱心網友回復:
使用MonthEnd偏移量 2(當前月份和下個月):
df['Date2'] = df['Date2'].fillna(df['Date1'].add(pd.offsets.MonthEnd(2)))
print(df)
# Output
Date1 Date2
0 2022-04-01 2022-06-17
1 2022-04-15 2022-04-15
2 2022-03-03 2022-04-30
3 2022-04-22 2022-05-31
4 2022-05-06 2022-06-06
uj5u.com熱心網友回復:
使用MonthEnd和loc:
from pandas.tseries.offsets import MonthEnd
>>> df.loc[df['Date2'].isnull(), 'Date2'] = df['Date1'] pd.DateOffset(months=1) MonthEnd(1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/487173.html
上一篇:從Java中的當前時間減去小時數
下一篇:將字串持續時間列轉換為秒
