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

时间:2017-07-07 09:13:17

标签: python pandas

我有一个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的信息?

1 个答案:

答案 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

您是否看到这些变化带来了性能提升?