2017-11-13 19 views
0

私はパンダで大丈夫になり始めていますが、この問題に対処する方法は不明です。古い辞書から新しい辞書を作成するパンダエントロピーを計算するデータフレーム

私は、エントロピーを計算しようとしているパンダのデータフレームに辞書の列を持っています。

辞書の各キーはクラスタを表し、値は同じクラスタ内の単語です。各行は、辞書内の要素の量が異なるこのように見えます。すなわち、いくつかは10まで持っている間、いくつかの辞書は、二つのクラスタを持っている:私は、各行のエントロピーを計算する

{1: ["'stop'", "'avoid'", "'stifle'", "'not'", "'squelch'", "'contain'", "'cover'", "'suppress'"], 2: ["'hold'"], 3: ["'burke'"], 4: ["'hod'"]} 

、私は、各クラスタ内の値が同じとみなすことにします。理想的に上記の例におけるように、基本的に次のようになりますので、私は私のエントロピーを実行することができ、このようになります1つのリストに、その後

{1: ["'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'"], 2: ["'hold'"], 3: ["'burke'"], 4: ["'hod'"]} 

そして最終的に私は、クラスタからそれぞれの値を取ることを望む、しこりその上で式:

["'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'hold'", "'burke'", "'hod'"] 

私は私の第二の例のようになり、その後、私の第三の例のようなリストにそれらの値を回すクラスタに新しい辞書を作成するために、パンダ以上の基本的なパイソンを使用する方法を見つけるのに苦労しています。

+0

あなたの最初の辞書の '1'に対応するリストが2番目の辞書の' 'すべての' '停止 '''になるのはなぜですか? – James

答えて

0

エントロピーの計算がどのように入力と出力に適合するかははっきりしませんが、ここではPandasと基本的なPythonの組み合わせを使って、必要な出力を得る方法の1つです。

import pandas as pd 

data = {1: ["'stop'", "'avoid'", "'stifle'", "'not'", "'squelch'", 
      "'contain'", "'cover'", "'suppress'"], 
     2: ["'hold'"], 
     3: ["'burke'"], 
     4: ["'hod'"]} 
s = pd.Series(data) 

s 
1 ['stop', 'avoid', 'stifle', 'not', 'squelch', ... 
2            ['hold'] 
3           ['burke'] 
4            ['hod'] 
dtype: object 

各リストの最初の要素を取り、後で分割するスペースを追加します。

s2 = s.apply(lambda x: (x[0]+" ")*len(x)) 

s2 
1 'stop' 'stop' 'stop' 'stop' 'stop' 'stop' 'sto... 
2            'hold' 
3            'burke' 
4            'hod' 
dtype: object 

は今、各行の各要素を引き出し、1つのリストに結合する:

slist = [] 
for valset in s2: 
    # strip the trailing space in each valset 
    for val in valset.strip().split(" "): 
     slist.extend([val]) 

slist 
["'stop'", "'stop'", "'stop'", "'stop'", "'stop'", "'stop'", 
"'stop'", "'stop'", "'hold'", "'burke'", "'hod'"] 
関連する問題