Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据熊猫的分组比较日期_Python_Pandas_Datetime_Pandas Groupby - Fatal编程技术网

Python 根据熊猫的分组比较日期

Python 根据熊猫的分组比较日期,python,pandas,datetime,pandas-groupby,Python,Pandas,Datetime,Pandas Groupby,好的,我想根据记录日期和时间的用户来获取日期和时间之间的差异。我在网上找不到任何关于这个的信息,所以这是我最后的选择。我有这个: timePage['Time spent on page'] = timePage['date'].diff() 它给出了日期列中日期之间的差异,但也没有考虑不同的用户。我已经按用户、实例和日期对数据进行了分组,希望代码到达用户组的底部,并指出不应将下一个日期与此日期进行比较,因为它是不同的用户。 而且,它不适用于我的数据的第一个索引。那么,我如何让它比较第一个索引

好的,我想根据记录日期和时间的用户来获取日期和时间之间的差异。我在网上找不到任何关于这个的信息,所以这是我最后的选择。我有这个:

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"}]
与lambda函数一起使用,
b填充
此处按组工作:

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
timePage = pd.DataFrame(L)

timePage['Date'] = pd.to_datetime(timePage['Date'])

timePage['Time spent on page'] = timePage.groupby('user')['Date'].diff().bfill()
print (timePage)
如果所有组至少有2行,则可以使用
bfill
链接,但要小心,因为
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
timePage = pd.DataFrame(L)

timePage['Date'] = pd.to_datetime(timePage['Date'])

timePage['Time spent on page'] = timePage.groupby('user')['Date'].diff().bfill()
print (timePage)

谢谢,但有一个小问题是索引已经过期了。第三个结果是第二次和第三次约会之间的差异,但我需要第三次和第四次约会之间的差异sense@AgentArachnid-样本数据中没有
3rd
4th
日期时间,因此不可能。是否可能创建?这只是一个示例。有没有办法将整个列上移一行?时间是准确的,但只需要向上移动一行,我找到了移位函数,所以我将使用它@耶斯雷尔感谢你的代码,它工作得很好,也很好。非常感谢你。我把移位函数放错了应用函数之外