2016-07-06 5 views
1

私はこのようなhereを示すようsize()列の名前を変更しようとしている:セット列名()

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 

です私のデータフレームのために働く?


I簡易印刷コピーした場合:これは、表がどのように見えるかです

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 [ "サイズ"] = x.groupby([ "sub_acct_id" 約"clndr_yr_month"])。transform(len) '? – jezrael

+0

@jezraelいいえ、私に同じエラーを与える:/ – 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

関連する問題