在Pandas中按组创建升序系列

时间:2014-01-08 20:33:58

标签: python pandas

我正在尝试在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

2 个答案:

答案 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]