繁体   English   中英

Python Pandas:按日期分组并计算每个时期的新记录

[英]Python Pandas: groupby date and count new records for each period

我正在尝试使用Python Pandas来统计一段时间内每天访问我网站的访问者。

示例数据:

df1 = pd.DataFrame({'user_id':[1,2,3,1,3], 'date':['2012-09-29','2012-09-30','2012-09-30','2012-10-01','2012-10-01']})

print df1
         date  user_id
0  2012-09-29        1
1  2012-09-30        2
2  2012-09-30        3
3  2012-10-01        1
4  2012-10-01        3

我想要得到的最终结果是:

df1_result = pd.DataFrame({'count_new':[1,2,0], 'date':['2012-09-29','2012-09-30','2012-10-01']})

print df1_result
   count_new        date
0          1  2012-09-29
1          2  2012-09-30
2          0  2012-10-01

在第一天,有1个新用户,因为用户1首次出现。

在第二天,有2个新用户:用户2和用户3都第一次出现。

最终,在第三天有0个新用户:用户1和用户3都已经出现在先前的时间段中。

到目前为止,我一直在研究合并同一数据框的两个副本,并按日期移动一个副本,但没有成功:

pd.merge(df1, df1.user_id.shift(-date), on = 'date').groupby('date')['user_id_y'].nunique()

任何帮助将非常感激,

谢谢

>>> (df1
     .groupby(['user_id'], as_index=False)['date']  # Group by `user_id` and get first date.
     .first()
     .groupby(['date'])  # Group result on `date` and take counts.
     .count()
     .reindex(df1['date'].unique())  # Reindex on original dates.
     .fillna(0))  # Fill null values with zero.
            user_id
date               
2012-09-29        1
2012-09-30        2
2012-10-01        0

最好添加一个新列Isreturning (以防将来需要分析回头客)

df['Isreturning']=df.groupby('user_id').cumcount()

只显示新客户

df.loc[df.Isreturning==0,:].groupby('date')['user_id'].count()
Out[840]: 
date
2012-09-29    1
2012-09-30    2
Name: user_id, dtype: int64

或者您可以:

df.groupby('date')['Isreturning'].apply(lambda x : len(x[x==0]))
Out[843]: 
date
2012-09-29    1
2012-09-30    2
2012-10-01    0
Name: Isreturning, dtype: int64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM