我有一個這樣的資料框:
| ID | 開始 | 結尾 |
|---|---|---|
| a1 | 2018-03-04 | 2020-03-03 |
| 乙1 | 2019-01-24 | 2021-05-08 |
我想要這樣的輸出:
| ID | 開始 | 結尾 |
|---|---|---|
| a1 | 2018-03-04 | 2019-03-03 |
| a1 | 2019-03-04 | 2020-03-03 |
| 乙1 | 2019-01-24 | 2020-01-23 |
| 乙1 | 2020-01-24 | 2021-01-23 |
| 乙1 | 2021-01-24 | 2021-05-08 |
謝謝!
uj5u.com熱心網友回復:
嘗試這個:
def split_date_range(row):
start, end = row[['start', 'end']]
dates = []
s = start
while True:
e = s pd.DateOffset(years=1) - pd.Timedelta(days=1)
if e < end:
dates.append((s, e))
s = e pd.Timedelta(days=1)
else:
dates.append((s, end))
break
return dates
tmp = df.set_index('id').apply(split_date_range, axis=1).explode()
result = pd.DataFrame([
[id_, *timerange] for id_, timerange in tmp.iteritems()
], columns=['id', 'start', 'end'])
該代碼用于id_避免與id()內置函式發生沖突。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360297.html
上一篇:從行對構建多索引資料框
下一篇:使用Pandas讀取JSON檔案
