我有一个熊猫数据框,其中有一些列。我感兴趣的专栏是这样的,
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
答案 0 :(得分:2)
将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