2016-11-28 5 views
4

で最高の加重値を選択するためのエレガントな方法は、私がのpython - セット

l = ['xyz','abc','mnq','qpr'] 

これらの値はxyz>abc>mnq>qpr は、私は値のセットを持つ列を持つパンダのデータフレームを有するように重み付けされるようなリストを持っています。

     COL_NAME  
0   set(['xyz', 'abc'])  
1   set(['xyz']) 
2   set(['mnq','qpr']) 

は今、私はに頼ることなく、この処理を行うためのエレガントな方法があり、私はカスタム関数を適用した後、私は

    COL_NAME  
0   set(['xyz'])  
1   set(['xyz']) 
2   set(['mnq']) 

が残っていますようにセットで最高値を選択したいです重みの辞書?

+2

あなたがキー関数にカスタム関数を作ることができるなら、あなたはおそらく、私は私の質問を編集し –

+0

'{最大({「XYZ」、「ABC」}、キー= your_function)}'のように残念な何かを行うことができます少し。うまくいけば、今私はもっと意味をなさないです。私は上記の機能を必要としていますが、それを実行する最善の方法はわかりません – Fizi

+1

重みに基づいて最大値を返す関数を作成し、max()を使用して抽出します。 – wwii

答えて

3

パラメータordered=Truepd.Categoricalを使用し、categories=l[::-1]を設定して希望の注文を得ることができます。

def max_cat(x): 
    return set([pd.Categorical(x, l[::-1], True).max()]) 

df.COL_NAME.apply(max_cat) 

0 {xyz} 
1 {xyz} 
2 {mnq} 
Name: COL_NAME, dtype: object 
+0

リンクを追加しました。あなたが反対しないことを願っています。 –

+0

@MadPhysicist全くありません – piRSquared

+0

これはまさに私が探していたものです。私は後続の質問を持っているかもしれません:)ただ1つのエラッタ - 戻り値を設定する必要があります([pd.Categorical(x、l [:: - 1]、True).max()]))。角括弧を使用しない場合、文字列を個々の文字のセットに変換してset(['xyz'])の代わりに、私はset(['y'、 'x'、 'z']) ) – Fizi

関連する問題