我有一个pandas数据帧,其中包含以下整数值列:
user_id, user_agent_id, appearances
行数不一,但超过4万。我想创建一个新的行总外观,它是每个用户的所有外观的总和。所以我做了以下几点:
dataframe['total_appearances'] = dataframe['appearances'].groupby(dataframe['user_id']).transform('sum')
我需要这个,因为我想计算每个用户的user_agent_id百分比
dataframe['percent'] = dataframe['appearances'] / dataframe['total_appearances']
我做同样的事情来计算百分比的最大值
dataframe['max_percent'] = dataframe['percent'].groupby(dataframe['user_id']).transform('max')
等。
事情是,当变换方法中的max方法花费大约5m时,sum方法需要更长的时间,即2秒。这很自然吗?有没有更快的方法来获取total_appearances
的信息?
答案 0 :(得分:0)
如果我正确理解了这个问题,你可以将前两行合并为一步,如下所示:
# sample data
df
appearances user_id
0 6 abc
1 3 abc
2 5 abc
3 8 def
4 4 gfd
5 2 uio
6 1 def
7 8 poi
8 3 fab
df['percent'] = df.groupby('user_id').appearances.apply(lambda x: x.div(np.sum(x)))
df
appearances user_id percent
0 6 abc 0.428571
1 3 abc 0.214286
2 5 abc 0.357143
3 8 def 0.888889
4 4 gfd 1.000000
5 2 uio 1.000000
6 1 def 0.111111
7 8 poi 1.000000
8 3 fab 1.000000
您是否看到这些变化带来了性能提升?