计算大熊猫总数的相对贡献

时间:2017-03-15 11:23:54

标签: python pandas group-by aggregate-functions

你有一个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'}})

1 个答案:

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