计算每天在Pandas中看到的新ID数量

dwbf0jvd  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(70)

给定以下数据,其中用户每天活跃,我想使用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

字符串
在我看来,步骤是:
1.计算每天的最大用户ID:df.groupby('Day').UserID.max()
1.使用前一天的最大UserID过滤数据(初始化为0):* 这里我不知道如何使用Pandas*
1.计算筛选数据集上唯一用户的登录数。df.filtered.groupby('Day').UserID.nunique()
有没有一个干净的方法来实现这一点?

osh3o9ms

osh3o9ms1#

这个构建为一个表,给出每个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()
)

字符串

7vux5j2d

7vux5j2d2#

假设数组首先按Day排序,你可以在UserID上分组(设置as_index=False),然后将结果的索引设置为Day。这会给你每天的每个新用户。

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

rbpvctlc

rbpvctlc3#

一种有效的方法(不依赖于groupby)是通过在按天排序的数据集上按UserID运行drop_duplicates,只保留每个UserID的第一次出现,然后使用value_counts计算每天的用户数:

out = (df
       .sort_values(by='Day') # only if not already sorted
       .drop_duplicates(subset='UserID')
       ['Day'].value_counts()
       .reset_index(name='New Users')
       )

字符串
输出量:

Day  New Users
0    1          3
1    2          2
2    3          1

相关问题