2017-07-21 12 views
0

しばらく前に、ラムダ関数をユーザーから受け取りました。パンダのラムダ関数表記

actresses_modified['Winner_Count'] = actresses_modified.apply(lambda x: actresses_modified.Name.value_counts()[x.Name], axis=1) 

、それが適用されたデータフレームは次のようになります。

Year Award   Winner Name 
2 1928 Best Actress 0.0  Louise Dresser 
3 1928 Best Actress 1.0  Janet Gaynor 
4 1928 Best Actress 0.0  Gloria Swanson 
40 1929 Best Actress 0.0  Ruth Chatterton 
41 1929 Best Actress 0.0  Betty Compson 

問題は、私はそれがどのように動作するか忘れてしまったです(私は離れて、この「楽しみのために」プロジェクトからステップしなければならなかった)と、具体的には、正確に何が起こっているのか[x.Name]です。

actresses_modified.Name.value_counts()という行だけで、データフレーム内のすべての女優名の数がわかります。 [x.Name]は英語で何を意味しますか?データフレームのWinner列にある各人の名前の横にある1をすべて集計して、合計得点を正確に返します。同じように重要なのは、このタイプの構文には名前がありますか?私のGoogle検索はnadaになった。

どのようなご意見をいただければ幸いですか?

+1

私は今パンダとnumpyになっていますが、ラムダがデータフレーム内の各項目に適用されて呼び出されるように見えます'value_counts'メソッドを呼び出し、データフレームから各女優を名前(' x.Name')で取得します。したがって、 'value_counts'がデータを保存しない限り、毎回不必要な作業をしているようです。それはあなたに理にかなっていますか?私はそれに関して何の経験もないかもしれませんが、私は95%のようなことが起こっていると確信しています。 –

答えて

1

ここでは、私がコメントで自分自身を明確にしたかどうかはわかりません。したがって、applyメソッドは、 "DataFrameの入力軸に沿って関数を適用します。"だから我々はactresses_modifiedと呼ばれる女優オブジェクトのコレクションを持って、それはこのようになりますことを、簡単のため、のは言わせて:

actresses_modified = [<Actress>, <Actress>, <Actress>, <Actress>] 

のは、これがActressが定義されている方法であると仮定しよう:

class Actress: 
    Name = "Some String" 

ので、コレクションの各女優にxという名前のラムダ関数が適用されます。 value_counts()は「個数が一意の値を含むオブジェクト」を返します。

したがって、私たちは各女優のvalue_counts()と呼ぶと、その女優のカウント値をキーで取得しています。のは、value_counts()女優名とその「カウント」で辞書を返し、それがこのようになっていることをふりをしてみましょう:

counts = { 
    'Jane Doe': 1, 
    'Betty Ross': 3, 
} 

そして、我々は女優の1のNameとの女優オブジェクトを持って、我々は我々value_counts()[x.Name]を呼び出すようにする場合、「ジェーン・ドウ」でありますcounts["Jane Doe"]を返すと、1を返します。

+0

拡張例のおかげで多くの。これは物事をクリアするための長い道のりです! – Ryan

+1

素晴らしい、幸せに助けてください。私は実際には「Python for Data Analysis」を読んでいます。今は良いタイミングでした。 –