【问题标题】:Date periods based on first occurence基于第一次出现的日期期间
【发布时间】:2017-12-22 13:43:44
【问题描述】:

我有一个熊猫订单数据框:

OrderID OrderDate   Value   CustomerID
1       2017-11-01  12.56   23
2       2017-11-06  1.56    23
3       2017-11-08  2.67    23
4       2017-11-12  5.67    99
5       2017-11-13  7.88    23
6       2017-11-19  3.78    99

让我们看看 ID 为 23 的客户。 他历史上的第一个订单是2017-11-01。这个日期是他第一周的开始日期。这意味着他在 2017-11-01 和 2017-11-07 之间的所有订单都分配给他的第 1 周(这不是像周一到周日那样的日历周)。 对于 ID 为 99 的客户,第一周当然是从 2017 年 11 月 12 日开始,因为这是他的第一个订单(OrderId 6)的日期。

我需要将表的每个顺序分配给公用表期间的相应索引。 Periods[0] 将包含客户第 1 周的订单,Periods[1] 客户第 2 周的订单等。 OrderId 1 和 OrderId 6 将在 Periods 表的同一索引中,因为这两个订单都是在其客户的第一周创建的。

包含订单 ID 的周期表必须如下所示: 周期=[[1,2,4],[3,5,6]]

【问题讨论】:

  • 您对这些数据的期望是什么?
  • 我需要创建一个群组。通常群组基于日历周或月。如果客户在周日下订单,则第一周的日历周结果将被隐藏,在这种情况下,我们将仅计算当天的订单。我想避免这种情况。
  • 您能否使用给定的数据框生成您期望的实际表格,

标签: list pandas period


【解决方案1】:

这是你想要的吗?

df['New']=df.groupby('CustomerID').OrderDate.apply(lambda x : (x-x.iloc[0]).dt.days//7)
df.groupby('New').OrderID.apply(list)
Out[1079]: 
New
0    [1, 2, 4]
1    [3, 5, 6]
Name: OrderID, dtype: object

获取周期表

df.groupby('New').OrderID.apply(list).tolist()
Out[1080]: [[1, 2, 4], [3, 5, 6]]

更多信息

df
Out[1081]: 
   OrderID  OrderDate  Value  CustomerID  New
0        1 2017-11-01  12.56          23    0
1        2 2017-11-06   1.56          23    0
2        3 2017-11-08   2.67          23    1
3        4 2017-11-12   5.67          99    0
4        5 2017-11-13   7.88          23    1
5        6 2017-11-19   3.78          99    1

【讨论】:

  • 没错!你太棒了。谢谢!
  • @czyzyk14 如果您需要。可以考虑接受吗?
  • 接受,对不起,我是新来的。
  • @czyzyk14 啊哈,快乐的编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多