我有一个这样的数据框:
from os import path
path_prefix = path.dirname(path.abspath(__file__))
csv_path = path.join(path_prefix, 'file.csv')
想要获得所有这些对象的累积计数:
0 04:10 obj1
1 04:10 obj1
2 04:11 obj1
3 04:12 obj2
4 04:12 obj2
5 04:12 obj1
6 04:13 obj2
尝试用cumsum玩,但不确定这是正确的方法。有什么建议吗?
答案 0 :(得分:12)
此操作有一个特殊功能:cumcount
null?
答案 1 :(得分:7)
您只需将该列与感兴趣的值进行比较,然后致电cumsum
:
In [12]:
df['obj1_count'] = (df['object'] == 'obj1').cumsum()
df['obj2_count'] = (df['object'] == 'obj2').cumsum()
df
Out[12]:
time object obj1_count obj2_count
idx
0 04:10 obj1 1 0
1 04:10 obj1 2 0
2 04:11 obj1 3 0
3 04:12 obj2 3 1
4 04:12 obj2 3 2
5 04:12 obj1 4 2
6 04:13 obj2 4 3
这里的比较将产生一个布尔系列:
In [13]:
df['object'] == 'obj1'
Out[13]:
idx
0 True
1 True
2 True
3 False
4 False
5 True
6 False
Name: object, dtype: bool
当您在上面调用cumsum
时,True
值会转换为1
和False
转换为0
并累计汇总
答案 2 :(得分:3)
您可以通过获取R documentation erroneously suggests的cumsum
来概括此过程。这应该适用于您想要计算的任意数量的对象,而无需单独指定每个对象:
time object obj1_count obj2_count
0 04:10 obj1 1 0
1 04:10 obj1 2 0
2 04:11 obj1 3 0
3 04:12 obj2 3 1
4 04:12 obj2 3 2
5 04:12 obj1 4 2
6 04:13 obj2 4 3
结果输出:
rename
如果可以使用count作为前缀而不是后缀,即'count_obj1'
而不是'obj1_count'
,则可以省略prefix
步骤。只需使用pd.get_dummies
的{{1}}参数:
counts = pd.get_dummies(df['object'], prefix='count').cumsum()
答案 3 :(得分:2)