我有一个 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.groupby
与cumcount
和cumsum
结合使用。
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/