计算每个值的出现次数,并对熊猫中的另一列求和

时间:2019-07-31 04:55:35

标签: python pandas

我有一个熊猫数据框,其中有一些列。我感兴趣的专栏是这样的,

df['col'] = ['A', 'A', 'B', 'C', 'B', 'A']

我想在另一列中写上col_count,使它显示从该索引到该列结尾的col中的计数值。

该列中的第一个A的值应为3,因为该索引在该列中出现A的情况为3。第二个A将具有值2,依此类推。

最后,我想得到以下结果,

    col     col_count
0   A   3
1   A   2
2   B   2
3   C   1
4   B   1
5   A   1

如何在熊猫中有效地做到这一点?通过遍历数据框并为切片的数据框对该值进行唯一计数,我能够做到这一点。

是否有一种有效的方法来做到这一点?最好没有循环。

问题的另一部分是,我还有col这样的另一列,

df['X'] = [10, 40, 10, 50, 30, 20]

我想用对col列进行计数的方式来总结该列。

例如,在索引0处,我将得到10 + 40 + 20。在索引1处,总和为40 +20。简而言之,我想对另一列求和而不是计数。

结果将是这样,

    col     col_count   X   X_sum
0   A   3   10  70
1   A   2   40  60
2   B   2   10  40
3   C   1   50  50
4   B   1   30  30
5   A   1   20  20

1 个答案:

答案 0 :(得分:2)

pandas.Series.groupbycumcountcumsum一起使用。

g = df[::-1].groupby('col')
df['col_count'] = g.cumcount().add(1)
df['X_sum'] = g['X'].cumsum()
print(df)

输出:

  col   X  col_count  X_sum
0   A  10          3     70
1   A  40          2     60
2   B  10          2     40
3   C  50          1     50
4   B  30          1     30
5   A  20          1     20