熊猫用总和变换需要太长时间



我有一个熊猫数据帧,其中包含以下列的整数值:

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

您是否看到这些更改提高了性能?

最新更新