【问题标题】:How to count dates lower than other date group?如何计算低于其他日期组的日期?
【发布时间】:2021-12-28 21:27:27
【问题描述】:

我有一个数据框:

install       type   id       date
2021-11-01    main   a1        NA
2021-11-01    main   a2     2021-11-02
2021-11-01    main   a3     2021-11-02
2021-11-01    main   a3     2021-11-02
2021-11-02    down   b4     2021-11-05
2021-11-03    main   b7     2021-11-05
2021-11-04    main   a3     2021-11-05

我想按日期和类型对这些数据进行分组,并计算安装时间低于日期的相同类型的唯一 ID。所以想要的结果是:

    date       type      count    
2021-11-02     main       3
2021-11-05     down       1
2021-11-05     main       4

对于2021-11-02 main,它是 3,因为有 3 个具有相同类型和更低日期的唯一 ID(a1、a2、a3),对于 2021-11-05 down 它只有 b4,对于 2021-11-05 main 它是 a1、b7、a2、a3

如何做到这一点?我知道 groupby 和 nunique(),但我不知道如何编写安装条件低于日期。

附言

我需要它来计算每个日期和类型组的保留值

【问题讨论】:

  • 您打算在两个日期都计算 NA 吗?
  • @Chris 你是什么意思?我正在计算唯一 ID,如您所见,没有 NA
  • 不是所有的main 类型都低于2021-11-05 吗?为什么要计算 a1 而不是 a2
  • @Chris 是的,我编辑了它
  • @sammywemmy 还有a1。它具有相同的类型并且安装时间低于日期

标签: python pandas dataframe group-by


【解决方案1】:

这并不是真正的 groupby,因为您不止一次地计算了一些记录。我不知道如何避免在这里循环,遍历每一对类型/日期和过滤器并采用 nunique。

out = []
for index, group in df.groupby(['date','type']):
    d, t = index
    out.append({'date':d, 'type':t, 'count':df.loc[(df['install']<d) & (df['type'].eq(t))]['id'].nunique()})
pd.DataFrame(out)

         date  type  count
0 2021-11-02  main      3
1 2021-11-05  down      1
2 2021-11-05  main      4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多