我有以下表格,我需要根據我得到的一些業務規則來重新計算StartDate。 具體來說,當后續會話的StartDate在一個日歷日內(即,<2天),會話被合并,使用較早的StartDate和較晚的EndDate。
| StartDate | EndDateDaysBetweenSessions||||
|---|---|---|---|---|
| 2011-04-15 | 2011-04-21 | 2011年4月21日 | 3 | |
| 2011-04-24 | 2011年4月24日 | 2011-04-27 | 2011年4月27日 | 3 |
| 2011-04-30 | 2011年4月30日 | 2011-05-01 | 2011年5月1日 | 0 |
| 2011-05-01 | 2011-05-01 | 2011-05-06 | 2011年5月6日 | 5 |
| 2011-05-11 | 2011年5月11日 | 2011-05-15 | 2011年5月15日 | 1 |
| 2011-05-16 | 2011年5月16日 | 2011-05-17 | 2011年5月17日 | 0 |
| 2011-05-17 | 2011年5月17日 | 2011-05-25 | 2011年5月25日 | 10 |
我需要的結果是:
| StartDate | EndDate | DaysBetweenSessions新開始日期NewEndDate||||||||
|---|---|---|---|---|---|---|---|---|---|
| 2011-04-15 | 2011-04-21 | 2011年4月21日 | 3 | 2011-04-15 | 2011年4月15日 | 2011-04-21 | 2011年4月21日 | ||
| 2011-04-24 | 2011年4月24日 | 2011-04-27 | 2011年4月27日 | 3 | 2011-04-24 | 3 | 2011-04-27 | 2011年4月27日 | |
| 2011-04-30 | 2011年4月30日 | 2011-05-01 | 2011年5月1日 | 0 | 0 | 2011-04-30 | 2011年4月30日 | 2011-05-06 | 2011年5月6日 |
| 2011-05-01 | 2011年5月1日 | 2011-05-06 | 2011年5月6日 | 5 | 2011-04-30 | 2011年4月30日 | 2011-05-06 | 2011年5月6日 | |
| 2011-05-11 | 2011年5月11日 | 2011-05-15 | 2011年5月15日 | 1 | 2011-05-11 | 2011年5月11日 | 2011-05-25 | ||
| 2011-05-16 | 2011年5月16日 | 2011-05-17 | 2011年5月17日 | 0 | 0 | 2011-05-11 | 2011年5月11日 | 2011-05-25 | |
| 2011-05-17 | 2011年5月17日 | 2011-05-25 | 2011年5月25日 | 10 | 10 | 2011-05-11 | 2011年5月11日 | 2011-05-25 | 2011-05-25> |
我試圖使用df.shift來獲得PreviousStartDate, PreviousEndDate, NextStartDate, NextEndDate,然后試圖用df.iterrows()來回圈瀏覽資料集。 iterrows(),計算新的日期,但是我遇到了一個我不完全理解的技術問題--雖然在用來更新一個值的回圈中,我不能對這個新的值使用運算子--新的值還沒有被寫入df中。
uj5u.com熱心網友回復:
嘗試使用groupby和tranform:
#convert to datetime if necessary。
df["StartDate"] = pd.to_datetime(df["StartDate"] )
df["EndDate"] = pd.to_datetime(df["EndDate"] )
df["NewStartDate"] = df.groupby((df["DaysBetweenSessions"]>=2) 。 cumsum().shift().fillna(0))["StartDate"].transform("min")
df["NewEndDate"] = df.groupby((df["DaysBetweenSessions"]>=2) 。 cumsum().shift().fillna(0))["EndDate"].transform("max")
>>> df
開始日期 結束日期 間隔天數 新開始日期 新結束日期
0 2011-04-15 2011-04-21 3 2011-04-15 2011-04-21
1 2011-04-24 2011-04-27 3 2011-04-24 2011-04-27
2 2011-04-30 2011-05- 01 0 2011-04-30 201105-06
3 201105-01 201105-06 5 2011-04-30 2011-05-06
4 201105-11 201105-15 1 2011-05-11 2011-05-25
5 2011-05-16 2011-5-17 0 2011-05-11 2011-05-25
6 2011-05-17 2011-05-25 10 2011-05-11 2011-05-25
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310919.html
標籤:
下一篇:如何在Java中獲取員工總數?
