列(收入)的总值基于:数据中另一列(日期)的值和另一列(用户ID)的值

2024-10-01 02:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个表/数据框:用户活动

用户中,我有以下列:用户ID国家DOB性别注册日期周后注册日期

其中:

UserId:每个用户的Id(在此表中仅显示一次),此数据帧/表中每个用户Id只有一行-->;它也是链接两个表/数据帧的关键列

出生日期:出生日期

RegDate:用户的注册日期

WeekAfterRegDate:注册后7天之后的日期

活动中我有以下列:用户ID日期收入

其中:

UserId:与用户中的列相同,但由于收入不同,它可以出现在多行中

我需要计算第一周每个用户产生的平均收入

我得到了这些线索,这些线索可能很有用:

  1. 合并这两个数据集
  2. 计算每个用户注册后的天数和活动表中的日期
  3. 考虑每个用户注册后前7天内产生的所有收入(不仅仅是每个用户产生的收入)

总之,我需要做的是为每个用户id创建一个循环,在两个日期之间求和Renevue。这两个日期之间的时间间隔是RegDateWeekAfterRegDate

我一直在尝试不同的方法,比如groupby等,但我有点迷路了


Tags: 数据用户gtid链接国家出生日期用户注册
2条回答

下面是我要做的: 首先,列出第一个数据帧中的用户

user_list = first_df.UserId.unique().tolist()

然后遍历此列表和第二个数据库,如下所示:

revenue_total = 0
for i in range(len(user_list)):
    for x in range(len(second_df):
        if second_df['userid'][x] == user_list[i] and second_df['Date'][x] <= first_df['WeekAfterRegDate'][i]:
            revenue_total = revenue_total + second_df['Revenue'][x]

然后,只需将总收入除以总用户数即可

 total_revenue /len(user_list)
            

确保您的日期列实际上是datetime,因为您将无法比较字符串以便在第一周内仅筛选出这些实例。有关converting strings into datetime,请参见此处

合并两个表:

df_merged = pd.merge(activity,users,on='UserID')

您将获得包含每行中各自日期的活动表

筛选合并列表:

df_merged = df_merged.loc[df_merged['Date'] >= df_merged['RegDate']] # lower bound
df_merged = df_merged.loc[df_merged['Date'] < df_merged['WeekAfterRegDate']] # upper bound

该表现在只包含相关行

现在按用户分组并计算收入:

df_revenue = df_merged.groupby('UserID')['Revenue'].sum()

相关问题 更多 >