【问题标题】:Efficient Way of Updating Dataframe Columns更新数据框列的有效方法
【发布时间】:2019-08-30 14:42:05
【问题描述】:

我有两个数据框:我们称它们为 group_user_log 和 group_user

group_user_log

user_id  server_time  session_id  

1           2018-01-01   435
1           2018-01-01   435
1           2018-01-04   675
1           2018-01-05   454
1           2018-01-05   454
1           2018-01-06   920 


group_train 

user_id  impression_time  totalcount  distinct_count
1         2018-01-03      0            0
1         2018-01-05      0            0

逻辑是从 group_user_log 中提取 session_id 的总计数和非重复计数,其中 server_time 小于impression_time,并填充总计数和非重复计数列。 group_train 的预期输出是:

user_id  impression_time  totalcount  distinct_count
1         2018-01-03      2               1
1         2018-01-05      3               2       

我尝试逐行进行,但对于较大的数据帧而言,这既耗时又效率很低,因为上述数据是来自两个大型数据帧的特定 user_id 的子集,并且需要对大量 user_id 进行此类计算所以我希望提高效率。

感谢您的帮助!!

【问题讨论】:

标签: python pandas


【解决方案1】:

使用groupbymergequery

#merge on user_id and query for server_time<impression_time
m=group_user_log.merge(group_train,on='user_id').query('server_time<impression_time')
#groupby on user_id and impression_time and agg on size and nunique
(m.groupby(['user_id','impression_time'])['session_id'].agg(['size','nunique'])
   .rename(columns={'size':'totalcount','nunique':'distinct_count'}))

                         totalcount  distinct_count
user_id impression_time                            
1       2018-01-03                2               1
        2018-01-05                3               2

然后您可以通过将user_idimpression_time 设置为索引来使用它来更新group_train

group_train=group_train.set_index(['user_id','impression_time'])
group_train.update(m)
print(group_train) #.reset_index()

                         totalcount  distinct_count
user_id impression_time                            
1       2018-01-03                2               1
        2018-01-05                3               2

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2018-09-11
相关资源
最近更新 更多