2017-02-06 3 views
3

私の質問は私の以前のQuestionに関連していますが、それは異なっています。だから私は新しい質問をしています。python pandasの同じ列の集計として、いくつかの値の一意性と数をグループ化してカウントする方法は?

上記の質問は、@ jezraelの回答を参照してください。

df = pd.DataFrame({'col1':[1,1,1], 
        'col2':[4,4,6], 
        'col3':[7,7,9], 
        'col4':[3,3,5]}) 

print (df) 
    col1 col2 col3 col4 
0  1  4  7  3 
1  1  4  7  3 
2  1  6  9  5 

df1 = df.groupby(['col1','col2']).agg({'col3':'size','col4':'nunique'}) 
df1['result_col'] = df1['col3'].div(df1['col4']) 
print (df1) 
      col4 col3 result_col 
col1 col2       
1 4  1  2   2.0 
    6  1  1   1.0 

ここでは、特定の値col4をカウントしたいと思います。同じクエリでcol4 == 3の数を取得したいとします。

df.groupby(['col1','col2']).agg({'col3':'size','col4':'nunique'}) ... + count(col4=='3') 

同じ質問でこれを行う方法私は腹を立ててみましたが、解決策を得られませんでした。

df.groupby(['col1','col2']).agg({'col3':'size','col4':'nunique','col4':'x: lambda x[x == 7].count()'}) 

答えて

2

前もって列としてcol4==3を含むことによって、いくつかの前処理を行います。

た場合は、最も単純にはx == 3sumTrue値がある3値をカウントする必要があります。その後aggregate

df.assign(result_col=df.col4.eq(3).astype(int)).groupby(
    ['col1', 'col2'] 
).agg(dict(col3='size', col4='nunique', result_col='sum')) 

      col3 result_col col4 
col1 col2       
1 4  2   2  1 
    6  1   0  1 

古い答え

g = df.groupby(['col1', 'col2']) 
g.agg({'col3':'size','col4': 'nunique'}).assign(
    result_col=g.col4.apply(lambda x: x.eq(3).sum())) 

      col3 col4 result_col 
col1 col2       
1 4  2  1   2 
    6  1  1   0 
を使用

はわずか

g = df.groupby(['col1', 'col2']) 
final_df = g.agg({'col3':'size','col4': 'nunique'}) 
final_df.insert(1, 'result_col', g.col4.apply(lambda x: x.eq(3).sum())) 
final_df 

      col3 result_col col4 
col1 col2       
1 4  2   2  1 
    6  1   0  1 
+0

ありがとう...それは私を助けた... –

2

私はあなたが列col4ためdictに機能のリストをaggregateが必要だと思います。

df1 = df.groupby(['col1','col2']) 
     .agg({'col3':'size','col4': ['nunique', lambda x: (x == 3).sum()]}) 
df1 = df1.rename(columns={'<lambda>':'count_3'}) 
df1.columns = ['{}_{}'.format(x[0], x[1]) for x in df1.columns] 
print (df1) 
      col4_nunique col4_count_3 col3_size 
col1 col2          
1 4    1    2   2 
    6    1    0   1 
+0

がCHE私にしてみましょう並び替えck。そして、どのようにして両方の結果に異なる列名を付けることができますか? –

+0

私はそれに取り組んでいます、私に秒をください。 – jezrael

+0

インターネット上にこの小さなデータを取り込んでパンダを実行できるものはありますか? –

関連する問題