2016-04-10 5 views
1

私のデータセットには、多数の一意の値(オブジェクトタイプ)を持つ1つの列があります。私はいくつかが(彼らが余分な場合)重要ではないと思うので、私はレベルが特定の定義されたしきい値の下にある場合は、グループを探しています。ラベルエンコーダモジュールを使用して列をカテゴリ値に変換した後、指定されたしきい値よりも少ないカウントを持つカテゴリを結合します。 私が準備したこのサンプルセットでは、 'bin'列の特定のクラスの総数(freq)が2より小さいか、 'new_bins'列の 'o'の代わりに新しい値を受け取る場合。 bin( 'c'、 'd')は 'new_bins'で 'o'に変更されます。類似のカテゴリ値をグループ化するPython

id | bin | new_bins 
======== ================= 
    1  a  a 
    2  a  a 
    3  b  b 
    4  c  o 
    5  b  b 
    6  a  a 
    7  b  b 
    8  a  a 
    9  c  o 
    10  a  a 
    11  d  o 
    12  d  o 

df.groupby(['bin'], sort=True).count()) 

これは私が試した1行のコードですが、私が欲しいものを達成できません。私はコードがないので、これは一種のファジーであることがわかります。私はこの問題がビンに言及していると思っていましたが、おそらくそれが何か他のものと呼ばれていました。カジグル競争では、レベルを組み合わせると呼ばれていました。多分私が探している用語やフレーズの名前を付けるだけでも助けになるでしょう。

答えて

1

これはあなたを助けるもの:

In [127]: df 
Out[127]: 
    id bin new_bins 
0 1 a  a 
1 2 a  a 
2 3 b  o 
3 4 c  o 
4 5 b  o 
5 6 a  a 
6 7 b  o 
7 8 a  a 
8 9 c  o 
9 10 a  a 

グループアイテム:

In [128]: dfg = df.groupby('bin').count() 

In [129]: dfg 
Out[129]: 
    id new_bins 
bin 
a  5   5 
b  3   3 
c  2   2 

をその列の値を変更するには条件に

In [130]: dfg[dfg['id'] > 2] 
Out[130]: 
    id new_bins 
bin 
a  5   5 
b  3   3 

In [143]: val = dfg[dfg['id'] <= 2] 

In [144]: val 
Out[144]: 
    id new_bins 
bin 
c  2 MODIFIED 

を満たしている項目を選択します条件を満たす。

In [147]: df.loc[df['bin'] == val.index[0], 'new_bins'] = 'MOD' 

In [148]: df 
Out[148]: 
    id bin new_bins 
0 1 a  a 
1 2 a  a 
2 3 b  o 
3 4 c  MOD 
4 5 b  o 
5 6 a  a 
6 7 b  o 
7 8 a  a 
8 9 c  MOD 
9 10 a  a 
+0

はうまくいくはずです。私はあなたの投稿を続けます。 – OAK

関連する問題