2017-01-30 10 views
3

)私は、ユーザに関する情報を含むデータフレームdf(450 000,15)を持っており、各ラインは13の特性(年齢、性別、郷土... )と1つのブール変数(ユーザーが車を所有しているか持っていないかにかかわらず)。最小グループサイズを持つパンダグループ(

私はユーザーを再編成して、どのグループが最も多くの車を持っているかを調べたいが、統計的に関連性を保つために少なくとも2500人のユーザーをグループに入れておく必要がある。

Gender 
Female 150000 
Male  300000 
dtype: int64 

test= df.groupby(['Gender']) 
test.size() # check the groups size 

は、これまでのところは良い、私はグループによる方法より2500以上のユーザーを持っています。

test2= df.groupby(['Gender','Age']) 
test2.size() 
Gender Age 
Female <30  15022 
     30-90 134960 
     90+  18 
Male  <20  5040 
     20-90 291930 
     90+  3030  
dtype: int64 

私たちが期待することができますように、私は今、非常に少ないユーザーとグループを持っているが...

私はこのような何かを持っていると思います。だから私は、別のグループ化の基準を持っていました:

Gender 
Female 150 000 # Don't split here because groups will be too small 

# Here I can split, because group size > 2500 : 
Gender Age 
Male  <20  5040 
     20-90 291930 
     90+  3030  
dtype: int64 

サイズ基準に基づいてgroupbyデータフレームをグループ化する方法が見つかりませんでしたので、これを処理するにはどうしたらいいのでしょうか。

私はユーザーをグループ化する13の特徴を持っているため、グループ化の順序についても疑問に思っています。最初に性別でグループ化するか、年齢別にグループ化するのか、これは、停止条件付きで複数の変数を使用する場合に影響します。

私はパンダを使う必要はありませんが、それは適切だと思いました。出力は次のようになります。

name_of_group group_size 
Female   150000 
Male, <20  5040 
Male, 20-90 291930 
Male, 90+  3030 

答えて

3

groupbyローごとに個別に計算でなければならない「キー」のグループにあります。つまり、グループの作成後(サイズのように)まではわからない集約特性に依存する、ある基準でグループ化する方法はありません。異なるグループ化を試みるコードを書くことができ、ヒューリスティックを使ってどちらが「最良」かを判断できますが、これには何も組み込まれていません。

0

すべてのグループに2500人以上のユーザーを追加しますか?

あなたことができるように、このような何か:

# List of all sets of categories you want to test 
group_ids_list = [['Gender'], ['Age'], ['Gender','Age']] 
# Will be filled with groups that pass your test 
valid_groups = [] 
group_sizes = {} 

for group_ids in group_ids_list : 

    grouped_df = df.groupby(group_id) 
    for key, group in grouped_df: 
     if len(group) > 25000: 
      valid_groups.append(group) 
      group_sizes[key] = len(group) 

group_sizes = pd.Series(group_sizes) 

そして、あなたが唯一の有効なハタを使用して作業することができます。 擬似コードが役立つことを願ってください。そうでなければ、再現可能な例を提供してください。

関連する問題