2017-11-16 9 views
1

を持っている私は、データフレームのように持っている:パイソン/パンダ - get_group部分文字列

name . profession 
Alex . Data Analyst 
Markus . Sales Manager 
Carlos . Credit Analyst 
Otavio . HR Manager 
... 

私はその職業に文字列「アナリスト」を持っているどのように多くの人々、このデータフレームで知っておく必要があります。答えは2でなければなりません。

groupbyget_groupを使用しようとしていますが、get_groupの構文に正しい方法を見つけることができません。

今私がここにいる:

df.groupby('profession').get_group(???).agg('count') 

誰かが右の構文であるか、またはそれを行うための別の方法を提案するだろうか助言することはできますか?

+1

一般的に、部分文字列のget_groupは使用できません。あなたができることはトライや何かで得ることです。ほとんどの場合、.str.containsは速くなりますが(それは問題であるかもしれないO(n)ですが)多くの「針」を再計算するとgroupbyのキーを索引付けする価値がある(例えば、トライで)。 –

答えて

2

あなたがスカラーの答えをしたい場合は、このコマンドを使用することができます。

df.profession.str.contains('Analyst').sum() 

出力:

df.assign(is_analyst = df.profession.str.contains('Analyst'))\ 
    .groupby('is_analyst')['name']\ 
    .size() 

出力:

2 

それともgroupbyとデータフレームとして

is_analyst 
False 2 
True  2 
Name: name, dtype: int64 
+1

グレートスコット。それが答えです。文章にORを含める方法はありますか?(例: "analyst" OR "magician")? – abutremutante

+2

@abutremutante 'str.contains(" analyst | magician ")' – Wen

+1

@abutremutanteはい、regexを使って'df.profession.str.contains( 'Analyst | Magician')' –

関連する問題