2016-07-06 58 views
1

我試圖重新命名size()列所示here這樣的:尺寸爲()設置的列名

x = monthly.copy() 

x["size"] = x\ 
     .groupby(["sub_acct_id", "clndr_yr_month"]).transform(np.size) 

但是我得到的是

ValueError: Wrong number of items passed 15, placement implies 1 

這是爲什麼不爲我的數據框工作?


如果我簡單的打印副本:

x = monthly.copy() 
print x 

這是表的樣子:

sub_acct_id clndr_yr_month 
12716D  201601    219 
      201602    265 
12716G  201601    221 
      201602    262 
12716K  201601    181 
      201602    149 
... 

什麼,我盡力去完成是設置列的名稱:

sub_acct_id clndr_yr_month  size 
12716D  201601    219 
      201602    265 
12716G  201601    221 
      201602    262 
12716K  201601    181 
      201602    149 
... 
+0

什麼'×〔 「大小」] = x.groupby([ 「sub_acct_id」, 「clndr_yr_month」])。transform(len)'? – jezrael

+0

@jezrael Nope,給我同樣的錯誤:/ – displayname

回答

1

您需要:

x["size"] = x.groupby(["sub_acct_id", "clndr_yr_month"])['sub_acct_id'].transform('size') 

樣品:

df = pd.DataFrame({'sub_acct_id': ['x', 'x', 'x','x','y','y','y','z','z'] 
       , 'clndr_yr_month': ['a', 'b', 'c','c','a','b','c','a','b']}) 
print (df) 
    clndr_yr_month sub_acct_id 
0    a   x 
1    b   x 
2    c   x 
3    c   x 
4    a   y 
5    b   y 
6    c   y 
7    a   z 
8    b   z 

df['size'] = df.groupby(['sub_acct_id', 'clndr_yr_month'])['sub_acct_id'].transform('size') 
print (df) 
    clndr_yr_month sub_acct_id size 
0    a   x  1 
1    b   x  1 
2    c   x  2 
3    c   x  2 
4    a   y  1 
5    b   y  1 
6    c   y  1 
7    a   z  1 
8    b   z  1 

與聚集輸出的另一個解決方案:

df = df.groupby(['sub_acct_id', 'clndr_yr_month']).size().reset_index(name='Size') 
print (df) 
    sub_acct_id clndr_yr_month Size 
0   x    a  1 
1   x    b  1 
2   x    c  2 
3   y    a  1 
4   y    b  1 
5   y    c  1 
6   z    a  1 
7   z    b  1 
+0

謝謝,這個作品! – displayname