python - 计算 Pandas 中每个值的出现次数并对另一列求和

标签 python pandas

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

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

我想创建另一列,col_count,以便它显示 col 中从该索引到列末尾的计数值。

该列中的第一个 A 的值应为 3,因为该索引的列中出现了 3 次 A。第二个 A 将具有值 2 等等。

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

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

如何在 pandas 中有效地做到这一点?我能够通过循环数据帧并为切片数据帧获取该值的唯一计数来做到这一点。

有没有有效的方法来做到这一点?没有循环的东西更好。

问题的另一部分是,我还有另一个这样的专栏以及 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

最佳答案

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

关于python - 计算 Pandas 中每个值的出现次数并对另一列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57283440/

相关文章:

python - 将 Pandas 数据框转换为 float

python - 如何更改Pandas的默认参数

python - Python中的多重继承问题!

python - 将 python 与 c/fortran 进行比较

python - 如何从充满 datetime.time 值的系列中提取小时、分钟和秒

Python连接远程SQL服务器

numpy - 从 txt 文件计算平均值、标准差的有效方法

python - Pandas 删除每列 id 的前 n 行

python - 将年份和日期转换为 Pandas 中的日期时间索引

python - 在 Pandas 中如何引用 2 个数据框并替换列