【问题标题】:Difference in weeks between first occurance and current occurance首次出现和当前出现之间的周数差异
【发布时间】:2022-01-07 12:18:49
【问题描述】:

我有一个包含项目和日期的大型数据集。简化版如下:

Item Date
1 2018-10-01
2 2018-04-03
1 2018-10-16
2 2018-04-15
1 2018-10-20
2 2018-04-30

我想添加 df['ItemAge'] 列,显示从项目出现日期到项目第一次出现日期之间的周数。在这里,周数四舍五入为整数。此变量的值在项目第一次出现的日期为 0。因此我想获得:

Item Date ItemAge
1 2018-10-01 0
2 2018-04-03 0
1 2018-10-16 2
2 2018-04-15 2
1 2018-10-20 3
2 2018-04-30 4

我正在考虑为每个项目创建变量 StartDate 作为每个项目第一次出现的日期。随后循环遍历这些项目并计算该项目的新出现与其 StartDate 之间的天数差。然后将此天数除以 7 并四舍五入为整数。

但是,我不知道如何在 python 中编写此代码。有人有什么建议吗?

【问题讨论】:

  • “我在想[…]”,整个过程都在那里,没有迹象表明这是作业

标签: pandas date datetime


【解决方案1】:

您可以转换为日期时间、groupby 项目和transform 以获取每个组的第一个日期。然后将生成的 TimeDelta 除以 7 得到天数:

d = pd.to_datetime(df['Date'])
df['ItemAge'] = ((d-d.groupby(df['Item']).transform('first')).dt.days/7).round().astype(int)

输出:

   Item        Date  ItemAge
0     1  2018-10-01        0
1     2  2018-04-03        0
2     1  2018-10-16        2
3     2  2018-04-15        2
4     1  2018-10-20        3
5     2  2018-04-30        4

【讨论】:

  • 谢谢!这如何与“第一个”变量一起工作?我需要为每个项目单独创建这个吗?或者我该如何编码?
  • @Karel_Hagen "first" 是 pandas 的内部函数之一
  • 非常感谢您的帮助!我试试看
猜你喜欢
  • 2021-07-05
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
相关资源
最近更新 更多