2015-04-14 216 views
1
  Date Ct 
0 2015-04-01 1 
1 2015-04-01 2 
2 2015-04-01 3 
3 2015-04-01 4 
4 2015-04-02 1 
5 2015-04-02 2 
6 2015-04-02 3 
7 2015-04-02 4 
8 2015-04-03 1 
9 2015-04-03 2 
10 2015-04-03 3 
11 2015-04-03 4 
12 2015-04-04 1 
13 2015-04-04 2 
14 2015-04-04 3 
15 2015-04-04 4 

我有一个字符串列“日期”,我想创建的“CT”列如下表示维持行数为某一日期。 Date在我的应用程序中需要是一个字符串,每个日期的行数不会总是相等,'Ct'将始终按数字索引的顺序计数。正确的方向的答案或微调将不胜感激。熊猫DF行数

+0

退房'df.groupby' – cphlewis

+0

但再拍柱日期为日期......还 – dartdog

回答

0

OK,这是一个有点怪异,但你可以添加一个临时列,将该值设置为1:

df['temp'] = 1 

然后你可以在“日期”执行GROUPBY并在“临时”调用transform列进行计数:

In [80]: 

df['Ct'] = df.groupby('Date')['temp'].transform(pd.Series.cumsum) 
df 
Out[80]: 
     Date temp Ct 
0 2015-04-01  1 1 
1 2015-04-01  1 2 
2 2015-04-01  1 3 
3 2015-04-01  1 4 
4 2015-04-02  1 1 
5 2015-04-02  1 2 
6 2015-04-02  1 3 
7 2015-04-02  1 4 
8 2015-04-03  1 1 
9 2015-04-03  1 2 
10 2015-04-03  1 3 
11 2015-04-03  1 4 
12 2015-04-04  1 1 
13 2015-04-04  1 2 
14 2015-04-04  1 3 
15 2015-04-04  1 4 
In [81]: 

df.drop('temp',axis=1,inplace=True) 
df 
Out[81]: 
     Date Ct 
0 2015-04-01 1 
1 2015-04-01 2 
2 2015-04-01 3 
3 2015-04-01 4 
4 2015-04-02 1 
5 2015-04-02 2 
6 2015-04-02 3 
7 2015-04-02 4 
8 2015-04-03 1 
9 2015-04-03 2 
10 2015-04-03 3 
11 2015-04-03 4 
12 2015-04-04 1 
13 2015-04-04 2 
14 2015-04-04 3 
15 2015-04-04 4 

的原因,我们不能只说在“日期”栏进行cumsum是因为,如果它是一个字符串,那么这将导致您的日期字符串与相互连接起来,其不是你想要的。

编辑

感谢主@Jeff用于指出临时列是unncecessary,你只需要使用cumcount

In [150]: 

df['Ct'] = df.groupby('Date').cumcount() + 1 
df 
Out[150]: 
      Date Ct 
0 2015-04-01 1 
1 2015-04-01 2 
2 2015-04-01 3 
3 2015-04-01 4 
4 2015-04-02 1 
5 2015-04-02 2 
6 2015-04-02 3 
7 2015-04-02 4 
8 2015-04-03 1 
9 2015-04-03 2 
10 2015-04-03 3 
11 2015-04-03 4 
12 2015-04-04 1 
13 2015-04-04 2 
14 2015-04-04 3 
15 2015-04-04 4 
+0

多数民众赞成它......谢谢你 – wlbsr

+1

cumcount()正好这 – Jeff

+0

@杰夫谢谢杰夫不知道这种方法 – EdChum