我正在尝试在pandas中按组创建一个升序的整数列表:
Group Date
A 2000-01-01
A 2000-01-12
A 2000-01-15
A 2000-10-01
B 2005-02-05
B 2006-04-10
B 2010-08-20
会变成这样:
Group Date obs_num
A 2000-01-01 1
A 2000-01-12 2
A 2000-01-15 3
A 2000-10-01 4
B 2005-02-05 1
B 2006-04-10 2
B 2010-08-20 3
答案 0 :(得分:4)
你也可以用cumsum做一些光滑的事情,例如:
df['obs_num'] = 1
df['obs_num'] = df.groupby('Group')['obs_num'].cumsum()
对于Tom的解决方案,我的小测试版本为6ms,而14.8ms。
答案 1 :(得分:2)
我认为这对你有用。我需要查看一些细节。
首先重置索引。看起来,当按级别(在索引上)进行分组时,订单不会被保留。
In [31]: df
Out[31]:
Date
Group
A 2000-01-01
A 2000-01-12
A 2000-01-15
A 2000-10-01
B 2005-02-05
B 2006-04-10
B 2010-08-20
[7 rows x 1 columns]
In [32]: df = df.reset_index()
现在它只是一个单行:
In [42]: df['obs_num'] = df.groupby('Group').transform(lambda x: np.arange(1, len(x) + 1))
In [43]: df
Out[43]:
Group Date obs_num
0 A 2000-01-01 1
1 A 2000-01-12 2
2 A 2000-01-15 3
3 A 2000-10-01 4
4 B 2005-02-05 1
5 B 2006-04-10 2
6 B 2010-08-20 3
[7 rows x 3 columns]