python - 根据熊猫组比较日期
问题描述
好的,所以我想根据记录它们的用户来获取日期和时间之间的差异。我似乎无法在网上找到任何关于此的信息,所以这是我最后的手段。我有这个:
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"}]
解决方案
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)
推荐阅读
- python - Django ORM:从大数据集中每天检索第一个测量值
- php - 选择一天并使用第二个参数的函数你可以在 PHP 中添加或反转日期吗?
- r - R 中创建新行并附加到数据框的一种简洁方式
- python - 如何在python中将字符串从一个txt文件替换为另一个txt文件
- reactjs - React+Typescript:如何在控制台中添加数字字段并显示输出?
- python - 从 multiprocessing.Process 继承的对象上的 Getter
- c++ - C++ IPv6 字符串表示为 boost::multiprecision::uint128_t
- python - 如何随机改变二进制列表中的 5 个值?
- java - 你如何使用java stream api根据对象内部存储的信息将对象列表转换为嵌套映射?
- web-scraping - IMPORTFROMWEB() , splitResult=TRUE 不适用于此表?