2016-08-16 4 views
2

グループ分けでカウントしようとしています。以下の入力と出力を参照してください。カラム内条件でパンダカウントが発生しています。

入力:

df = pd.DataFrame() 

df['col1'] = ['a','a','a','a','b','b','b'] 
df['col2'] = [4,4,5,5,6,7,8] 
df['col3'] = [1,1,1,1,1,1,1] 

出力:

col4 
0  2 
1  2 
2  2 
3  2 
4  1 
5  1 
6  1 

行うことによって、GROUPBYで遊んとカウントしようとしました:

s = df.groupby(['col1','col2'])['col3'].sum() 

と私が得た出力をした

a  4  2 
     5  2 
b  6  1 
     7  1 
     8  1 

メインDFの列と同じように追加するにはどうすればよいですか。

ありがとうございました!

答えて

2

使用transformlenまたはsize

df['count'] = df.groupby(['col1','col2'])['col3'].transform(len) 
print (df) 
    col1 col2 col3 count 
0 a  4  1  2 
1 a  4  1  2 
2 a  5  1  2 
3 a  5  1  2 
4 b  6  1  1 
5 b  7  1  1 
6 b  8  1  1 

df['count'] = df.groupby(['col1','col2'])['col3'].transform('size') 
print (df) 
    col1 col2 col3 count 
0 a  4  1  2 
1 a  4  1  2 
2 a  5  1  2 
3 a  5  1  2 
4 b  6  1  1 
5 b  7  1  1 
6 b  8  1  1 

しかし、列col3は必要ありません、あなたはcol1col2使用することができます、これを試してみてください

df = pd.DataFrame() 

df['col1'] = ['a','a','a','a','b','b','b'] 
df['col2'] = [4,4,5,5,6,7,8] 

df['count'] = df.groupby(['col1','col2'])['col1'].transform(len) 
df['count1'] = df.groupby(['col1','col2'])['col2'].transform(len) 
print (df) 
    col1 col2 count count1 
0 a  4  2  2 
1 a  4  2  2 
2 a  5  2  2 
3 a  5  2  2 
4 b  6  1  1 
5 b  7  1  1 
6 b  8  1  1 
+0

boom!それは私がcol3を持っていないことを望んでいて、「sum」を使用するためだけにそれを使用していました。 – spiff

1

df['count'] = df.groupby(['col1','col2'])['col3'].transform(sum) 
print (df) 
    col1 col2 col3 count 
0 a  4  1 2 
1 a  4  1 2 
2 a  5  1 2 
3 a  5  1 2 
4 b  6  1 1 
5 b  7  1 1 
6 b  8  1 1 
関連する問題