我很擅长使用PANDAS和python。
我有一个包含多个主题的分层数据集,每个主题都有一些观察结果。总df约为五十万行。
我想计算观察数...
## toy problem
d = {'one' : Series(['a', 'a', 'a', 'b', 'b', 'b'], index = [0,1,2,3,4,5]),
'two' : Series([1.1, 2.5, 3.3, 2.5, 3.3, 9.5], index = [0,1,2,3,4,5])}
df = DataFrame(d)
for i in df.one.unique():
for j in range(0,len(df[df.one == i])):
print j
所以我想将j分配给每一行的列。我没有问题计算j,但我无法弄清楚如何分配它。我已经尝试过使用非常慢的iloc,或写入列表,然后将其加入到df中,也非常慢(目前运行超过30分钟并计数......)。我知道python最适合矢量化问题,但我想不出这种情况的矢量解决方案。
最好的方法是什么?在R中它非常简单快捷。我目前正在迁移到Python& PANDAS期望它更快但这似乎不是这里的情况。
请问任何建议?
答案 0 :(得分:2)
您可以使用GroupBy.cumcount
method:
In [14]: df['j'] = df.groupby('one').cumcount()
In [15]: df
Out[15]:
one two j
0 a 1.1 0
1 a 2.5 1
2 a 3.3 2
3 b 2.5 0
4 b 3.3 1
5 b 9.5 2