Python 计算熊猫每天看到的新ID的数量

Python 计算熊猫每天看到的新ID的数量,python,pandas,Python,Pandas,鉴于以下数据,其中用户每天都很活跃,我想使用Pandas计算每天新用户的数量 Data: Day | UserID ---------- 1 | A 1 | B 1 | C 1 | C ---------- 2 | A 2 | B 2 | D 2 | A 2 | E ---------- 3 | B 3 | D 3 | F Result:

鉴于以下数据,其中用户每天都很活跃,我想使用Pandas计算每天新用户的数量

Data:
  Day | UserID
  ----------
   1  |  A 
   1  |  B
   1  |  C
   1  |  C
   ----------
   2  |  A 
   2  |  B
   2  |  D
   2  |  A 
   2  |  E
  ----------
   3  |  B 
   3  |  D
   3  |  F

Result:    
  Day | New Users
  ---------------
   1  |  3
   2  |  2
   3  |  1
在我看来,步骤如下:

  • 计算每天的最大用户ID:df.groupby('day').UserID.max()
  • 使用前一天的最大用户ID(初始化为0)筛选数据:这里我不知道如何使用Pandas进行此操作
  • 计算过滤数据集中来自唯一用户的登录数df.filtered.groupby('Day').UserID.nunique()

  • 是否有一种干净的方法来实现这一点?

    此构建为一个表,给出每个ID第一次出现的日期,按天分组,然后统计相应的行

    df = pd.DataFrame([(1, "A"), (1, "B"), 
                       (1, "C"), (1, "C"), 
                       (2, "A"), (2, "B"), 
                       (2, "D"), (2, "A"), 
                       (2, "E"), (3, "B"), 
                       (3, "D"), (3, "F")], 
                      columns=["day", "userid"]) 
    
    (df
      .sort_values('day')
      .groupby('userid')
      .first()
      .rename(columns={"day": "first_seen"})
      .groupby('first_seen').size()
    )
    

    假设数据帧首先按
    排序,您可以在
    用户ID
    上分组(将
    设置为_index=False
    ),然后将结果的索引设置为
    。这将为您每天提供每个新用户

    df2 = df.groupby('UserID', as_index=False).Day.first().set_index('Day') 
    >>> df2
        UserID
    Day       
    1        A
    1        B
    1        C
    2        D
    2        E
    3        F
    
    然后获取新用户的总数:

    >>> df2.groupby(level=0).UserID.count()
    Day
    1    3
    2    2
    3    1
    Name: UserID, dtype: int64