Python 使用sum进行转换花费的时间太长
我有一个pandas数据框,它有以下整数值列: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') 我需要它,因为我想计算每个用户的百
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-已使用命名约定和固定的打字错误进行更新。粘贴时以某种方式忽略了应用
。很抱歉让你感到困惑。