向基于同一列的先前值添加的pandas数据框添加另一列

时间:2020-02-12 15:21:21

标签: python pandas dataframe

我有以下数据框

rng = pd.date_range('2019-02-24', periods=5, freq='H')
rng2 = pd.date_range('2019-02-25', periods=3, freq='H')
test = pd.DataFrame({'id': [111, 111, 111, 111, 111, 111, 111, 111],
                    'date': rng.append(rng2)})
test["next_date"] = test.groupby("id")["date"].shift(-1)
test["step_hours"] = (pd.to_datetime(test['next_date'], utc=True) - pd.to_datetime(test['date'], utc=True)).astype('timedelta64[h]')

为简单起见,让我们认为我们只有一个id。对于每个ID,我想要另一列来计算会话号。如果小时数- step_hours 列小于5,则这些日期时间属于同一会话。如果没有,它将启动另一个会话,即上一个会话+ 1。

在我们的示例中,我们有2个会话:会话1:测试[:4],会话2:测试[4:7] 我尝试使用滚动,但是由于我没有固定的时间段,因此无法在我的示例中使用。 我尝试轮班,但似乎没有做到我想要的:

test['session'] = 1
test['session'] = np.where(test['step_hours']<=5, test['session'].shift(1), test['session'].shift(1)+1)

谢谢!

0 个答案:

没有答案