2017-08-30 5 views
2

私は以下のような辞書を持っています。辞書のキーの値をチェックし、Pythonのみを使用してキーの行列を構成します

mydictionary = {colours: [red, pink, blue, green, yellow], animals: [cat, rat, dog, goat], 
vehicles: [car, jeep, van, bus, lorry]} 

Iはまた、(それ以外の場合は0、その値は、私はそれ1作る読み取るエッセイにある場合)以下の実施例に与えられるようにキーの各値のマトリックスを有します。

 red, pink, blue, green, yellow, cat, rat, ... bus, lorry 
Essay1: 1  0  0 1  1  0 0  1  0 
Essay2: 0  1  0 0  1  0 1  0  0 

したがって、これはリストのリストのようです。

[[1,0,0,1,1,0,0,1,0], [0,1,0,0,1,0,1,0,0]] 

は、今使って「mydictionaryは、」私は、次のように(キーの1つ以上の値が1であれば、私は他に、0を1としてキーをマークしていること)上の行列を変換したいです。

 Colours, Animals, Vehicles 
Essay1: 1   0  1 
Essay2: 1   1  0 

上記のマトリックスは、以下のようなリストのリストとして書くことができます。

[[1,0,1], [1,1,0]] 

私はこのため、パンダに新しいです、これはパンダのデータフレームを使用して行うことが可能であるならば、私は知ることに興味があります。

答えて

2

あなたが集計maxで列名によって、新しいdictvalueskeysを交換df列の名前を変更し、その後groupbyことができます。

L = [[1,0,0,1,1,0,0,1,0], [0,1,0,0,1,0,1,0,0]] 
cols = ['red', 'pink', 'blue', 'green', 'yellow', 'cat', 'rat', 'bus', 'lorry'] 
df = pd.DataFrame(L, columns=cols) 
print (df) 
    red pink blue green yellow cat rat bus lorry 
0 1  0  0  1  1 0 0 1  0 
1 0  1  0  0  1 0 1 0  0 

d = {k: oldk for oldk, oldv in mydictionary.items() for k in oldv} 
df = df.rename(columns=d).groupby(axis=1, level=0).max() 
print (df) 
     animals colours vehicles 
Essay1:  0  1   1 
Essay2:  1  1   0 
+0

あなたは私の最初の行列が取得するためにどのように入力を教えてくださいすることができ最終行列? –

+1

データが 'df = pd.read_csv( 'file)のようにファイルに含まれている場合は、[' read_csv'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html) .csv '、sep ='; ') '(必要に応じてセパレータを変更する) – jezrael

+0

csvファイルを使用する代わりに、リストのリストとしてdfとして使用できますか? [[1,0,0,1,1,0,0,1,0]、[0,1,0,0,1,0,1,0,0]]。あなたのコードを試してみましたが、 'list'オブジェクトに属性 'groupby'がありませんというエラーが表示されます –

3
m = {v: k for k, l in mydictionary.items() for v in l} 
df.groupby(df.columns.map(m.get), 1).sum().clip(0, 1) 

     animals colours vehicles 
Essay1  0  1   1 
Essay2  1  1   0 
関連する問題