2015-04-14 55 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