【问题标题】:How get Conditional average on date in DataFraem?如何在 DataFrame 中获取日期的条件平均值?
【发布时间】:2022-01-06 11:52:03
【问题描述】:

我有一个数据框,其中一些行是相等的,首先我想从相等的行中的较小日期中减去较大的日期,然后最后计算得到的日期的平均值,也就是几天。但只选择至少有两个 Order_id 和一个 Customer_id 的日期,我的数据框如下所示:

Customer_id   date     Order_id
12          22/11/2021     2
12          29/11/2021     2
12          30/11/2021     2
42          10/11/2021     2
42          18/11/2021     2
43          19/11/2021     3

然后减去日期:(最后一行没有被选中,因为它有一个customer_ID和一个order_id)

Customer_id   date     Order_id  Subtract_date
12          22/11/2021     2         8
12          29/11/2021     2         8
12          30/11/2021     2         8
42          10/11/2021     2         8
42          18/11/2021     2         8

然后删除重复的行,最后取 Subtract_date 列的平均值:

Customer_id   date     Order_id  Subtract_date
12          22/11/2021     2         8
42          10/11/2021     2         8

【问题讨论】:

  • “相等的行”是指Customer_idOrder_id 相等但日期不相等的行,对吗?
  • yesو Order_id 列在所有行中都是相同的,但 Customer_id 列在某些头中是相同的
  • 很抱歉,但我不确定我是否理解。您认为行 12 22/11/2021 212 30/11/2021 2 相等,而行 12 30/11/2021 242 10/11/2021 2 8 不相等,对吧?
  • 在我的数据框中,有一些行具有相同的客户 ID,并且每个客户 ID 在日期列中有不同的日期。在每个客户 ID 的日期中,必须找到最大的日期并减去最小的日期才能产生差异。比如客户 ID 12 有 3 个日期,只有最大的日期是 /30/11/2021 和最小的日期是 11/22/2012,两者相减,并且在减 ID 列存在差异。
  • 其实客户ID相同的列是相等的,例如客户ID 12有三行相等,但我要获取最大最小的日期列中的日期不同每个客户 ID 的日期和差异 计算

标签: python pandas dataframe datetime mean


【解决方案1】:

您可以运行以下命令来删除有 1 个订单的客户:

cust_to_keep = df.groupby('Customer_id').date.transform('count')
df = df.loc[cust_to_keep>1]

然后利用 Groupby 和 NamedAggregation 获得所需的输出:

import datetime as dt
df.groupby(['Customer_id','Order_id']).agg(date=('date','min'),Subtract_date = ('date',lambda x:(x.max()-x.min()).days)).reset_index()

【讨论】:

    【解决方案2】:

    如果我理解正确,试试这个:

    df.groupby(['Customer_id', 'oder_id']).agg(np.ptp).reset_index().rename({'date':'Subtract_date'}, axis = 1)
    

    输出:

    【讨论】:

    • 要过滤最后一行(或任何 0 天),使用 df[df["Subtract_date"] > 0]
    • 感谢您的指导,但我的问题是如何找到每个客户 ID 的最大和最小日期并减去它们以获得差异?像客户 ID 12
    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2020-09-27
    • 2014-09-23
    相关资源
    最近更新 更多