2017-04-26 7 views
1

大きなデータフレームから始めました。私はいくつかのコラムを編み出して並べ替えました。私が最後に保存され(かなり大きい)データフレームのヘッドはこのように見えた:私は一緒にグループに名前のすべてを必要とし、次の各ダミー変数をカウントgroupby文はデータフレームをシリーズに崩壊させますか?

# bsa_mod = 'best supporting actress modified' dataframe 
[1] bsa_mod = bsa_mod[['Year', 'Name', 'Winner']] 
[2] bsa_mod.head() 

    Year Name    Winner 
431 1936 Beulah Bondi  0.0 
432 1936 Alice Brady   0.0 
433 1936 Bonita Granville 0.0 
434 1936 Maria Ouspenskaya 0.0 
435 1936 Gale Sondergaard 1.0 

。たとえば、Agnes Moreheadは名前欄に4回表示され、毎回彼女の名前の隣に0または1のいずれかが表示されるため、最終的なサマリーテーブルには「Agnes Morehead 4」と表示されます。私は次のようにすることを得た:

# aggregate nominations by actress 
bsa_mod_count = bsa_mod.groupby('Name').Winner.count() 
Name 
Abigail Breslin 1 
Adriana Barraza 1 
Agnes Moorehead 4 
Alfre Woodard  1 
Alice Brady  2 
Name: Winner, dtype: int64 

私は要約統計を取得するには、この上の().describeを実行し、算出した最大値は6

であることがわかった私は、この謎の人物がいた人を探していました以下のようなものを実行して:私の驚いたことに

most_nominations = bsa_mod_count[bsa_mod_count.Winner == 6] 

、私は「勝者」は存在しなかったという属性エラーを持って、私が今扱ったとのデータ型は、シリーズと、もはやデータフレームだったこと。

データフレームは 'groupby'の後にシリーズに縮退しますか?私はインデックスを上書きすることを期待していませんでした。これはまた、.agg([count '])を実行したときに発生したようです。私がデータフレームを保存し、 '6'を使用可能にするために、これをやり遂げた別の方法がありますか?

答えて

1
#if you want to retain the index and the dataframe format, try below: 
bsa_mod['Winner_Count'] = bsa_mod.apply(lambda x: bsa_mod.Name.value_counts()[x.Name],axis=1) 
print(bsa_mod) 

    Year    Name Winner Winner_Count 
431 1936  Beulah Bondi  0.0    1 
432 1936  Alice Brady  0.0    1 
433 1936 Bonita Granville  0.0    1 
434 1936 Maria Ouspenskaya  0.0    1 
435 1936 Gale Sondergaard  1.0    1 

#Then you can do something like: 
bsa_mod[bsa_mod.Winner_Count == 2] 
+0

これは非常にセクシーなラムダ関数です。私は間違いなくそれと一緒に遊びます。とても有難い! – Ryan

+0

私はあなたの答えを受け入れたいと思います。あなたが私に尋ねる気にならないなら、どのようにあなたの方法でインデックスを保持し、それ以外の方法で管理しないのですか?そして[x.Name]はどのように解釈するのですか? – Ryan

+1

groupbyを実行すると集約操作が行われるため、レコード数が減少する可能性があります。たとえば、複数の 'Alice Brady'がある場合、groupbyの後には、 'Alice Brady'のレコードは1つだけになります。元のインデックスは、複数あるのであいまいです。私の解決策では、私はグループではまったくやっていません。 apply関数は、現在の行の名前のカウントのみを検索します。 – Allen

2

答えはいいえ、グループごとに構造を保存します。

あなたの例ではbsa_mod.groupby('Name').Winner.count()はシリーズオブジェクトを返しますが、bsa_mod.groupby('Name').count()はデータフレームを返します。

+0

質問し、回答済み!私が見たビデオにあったことを願います。どうもありがとう! – Ryan

関連する問題