Python 使用sum进行转换花费的时间太长

Python 使用sum进行转换花费的时间太长,python,pandas,Python,Pandas,我有一个pandas数据框,它有以下整数值列: user_id, user_agent_id, appearances 行数不同,但超过40万行。我想创建一个新行total Appearancess,它是每个用户所有外观的总和。因此,我做了以下工作: dataframe['total_appearances'] = dataframe['appearances'].groupby(dataframe['user_id']).transform('sum') 我需要它,因为我想计算每个用户的百

我有一个pandas数据框,它有以下整数值列:

user_id, user_agent_id, appearances
行数不同,但超过40万行。我想创建一个新行total Appearancess,它是每个用户所有外观的总和。因此,我做了以下工作:

dataframe['total_appearances'] = dataframe['appearances'].groupby(dataframe['user_id']).transform('sum')
我需要它,因为我想计算每个用户的百分比,即每个用户的代理id

dataframe['percent'] = dataframe['appearances'] / dataframe['total_appearances']
我做同样的事情来计算百分比的最大值

dataframe['max_percent'] = dataframe['percent'].groupby(dataframe['user_id']).transform('max')
等等


问题是,变换方法中的max方法需要大约5m的时间,求和方法需要更长的时间,也就是2sec。这是自然的吗?是否有更快的方法获取
总外观信息

如果我正确理解了问题,您可以通过以下方式将前两行合并为一个步骤:

# 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

您认为这些更改会提高性能吗?

什么是
方法?对不起,这是列名。此外,我从未见过这种语法在列名上使用偏执。我在计算百分比时没有问题,但在计算总外观列时没有问题。问题在于转换:)。但我会检查并返回youName括号中的预期错误。可能您缺少对方法的调用?您的代码
语法错误:无效语法
@Apostolos-已使用命名约定和固定的打字错误进行更新。粘贴时以某种方式忽略了应用
。很抱歉让你感到困惑。