好的,因此我想根据记录它们的用户来获取日期和时间之间的差异。我似乎无法在网上找到任何有关此的信息,所以这是我的最后选择。我有这个:
timePage['Time spent on page'] = timePage['date'].diff()
它为我提供了日期列中日期之间的区别,但同时也没有考虑不同的用户。我已经按用户对数据进行了分组,然后是实例,然后是日期,并希望代码到达用户组的底部,并说不应将下一个日期与该日期进行比较,因为它是另一个用户。 另外,它不适用于我的数据的第一个索引。那么如何获取它来比较第一个索引和第二个索引,然后将其存储在第一个索引行上?
样本数据:
L = [{ "user" : "43tuhgn34",
"Instance" : "f34yh",
"Date" : "2019-02-14 12:54:52.000000+00:00"},
{ "user" : "43tuhgn34",
"Instance" : "wrg32",
"Date" : "2019-02-15 11:34:12.000000+00:00"},
{ "user" : "erg34g",
"Instance" : "f34yh",
"Date" : "2018-03-11 17:21:26.430000+00:00"}]
答案 0 :(得分:1)
使用GroupBy.apply
和lambda函数,bfill
在这里按组工作:
timePage = pd.DataFrame(L)
timePage['Date'] = pd.to_datetime(timePage['Date'])
timePage['Time spent on page'] = (timePage.groupby('user')['Date']
.apply(lambda x: x.diff().bfill()))
print (timePage)
user Instance Date Time spent on page
0 43tuhgn34 f34yh 2019-02-14 12:54:52+00:00 22:39:20
1 43tuhgn34 wrg32 2019-02-15 11:34:12+00:00 22:39:20
2 erg34g f34yh 2018-03-11 17:21:26.430000+00:00 NaT
如果所有组至少有2行,则可以将DataFrameGroupBy.diff
与bfill
链接起来,但是要小心,因为bfill
在这里不适用于每个组:
timePage = pd.DataFrame(L)
timePage['Date'] = pd.to_datetime(timePage['Date'])
timePage['Time spent on page'] = timePage.groupby('user')['Date'].diff().bfill()
print (timePage)