我有一个熊猫数据帧,其中包含以下列的整数值:
user_id, user_agent_id, appearances
行数各不相同,但超过 40 万行。我想创建一个新的行总外观,这是每个用户所有外观的总和。所以我做了以下几点:
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
的信息?
如果我正确理解了这个问题,你可以用这样的内容将前两行合并为一个步骤:
# 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
您是否看到这些更改提高了性能?