你有一个df看起来像:
keyword clicks
a 20
b 40
c 50
a 10
我想获得一个分组的df,其中包含关键字百分比相对于点击百分比的相对贡献。
我的最终目标是检查是否存在帕累托关系 数据的基础。
我想象的是:20%的关键字贡献了80%的点击次数,用于绘制kw分数与点击次数的结果。
可重复的例子是:
df = pd.DataFrame({'clicks': {0: 20, 1: 40, 2: 50, 3: 10},
'keyword': {0: 'a', 1: 'b', 2: 'c', 3: 'a'}})
答案 0 :(得分:0)
首先分组并取总和,并对这些值进行排序(降序,所以最大值是第一个)。然后使用cumsum并除以总计得到累积百分比(在新列中):
df = df.groupby('keyword').sum().sort_values(by='clicks', ascending=False)
df['cumulative click %'] = (df['clicks'].cumsum() / sum(df['clicks']))*100
要获取关键字的累计百分比,请重置索引(两次)以获取仅为行号的列,并将其除以总行数:
df = df.reset_index().reset_index()
df['index'] = df['index'] + 1
df['index'] = (df['index']/len(df['index']))*100
df = df.rename(columns = {'index':'cumulative keyword %'})
输出:
cumulative keyword % keyword clicks cumulative click %
0 33.333333 c 50 41.666667
1 66.666667 b 40 75.000000
2 100.000000 a 30 100.000000