2017-07-27 12 views
2

新しい列を作成し、このデータフレームを別のオブジェクト(たとえばリストのリスト)にマッピングした結果の値を設定する方法python?リストでの列データフレームのマッピングPython

私はパンダのデータフレーム持っている:私はリストの私のリストのように3つの大きなクラスを含むされる、私のデータフレームに新しい列を作成したい

[[15,10], [11], [9,7,8]] 

{'a': [15,10,11,9,7,8], 'b':['smth','smth','smth','smth', 'smth', 'smth']. 

そして、リストのリストを。

私が意味する、私はこれを取得したい:

{'a': [15,10,11,9,7,8], 'b':['smth','smth','smth','smth', 'smth', 'smth', 
'new_column': [0,0,1,2,2,2]} 
+0

あなたに何を教えてくださいeはこれまでに試みた。あなたがしていることを理解しているかどうかわからない、あなたが今までに示したものから 'dataframe ['new_column'] = ...'を使うことができるようです。 – casraf

答えて

0

あなたがでnp.whereを使用することができますリストの理解:

In [926]: import itertools 

In [927]: l = np.array(list(itertools.zip_longest(*[[15,10], [11], [9,7,8]], fillvalue=0))).T 

In [928]: df['new'] = [np.where(l == i)[0][0] for i in df.a.values] 

In [929]: df 
Out[929]: 
    a  b new 
0 15 smth 0 
1 10 smth 0 
2 11 smth 1 
3 9 smth 2 
4 7 smth 2 
5 8 smth 2 
3

あなたはdict comprehensionによって作成dictmapを使用することができ、リストの値が一意である必要があります:

df = pd.DataFrame({'a': [15,10,11,9,7,8], 'b':['smth','smth','smth','smth', 'smth', 'smth']}) 

L = [[15,10], [11], [9,7,8]] 
#https://stackoverflow.com/q/45349225/2901002 
d = { v : i for i,vs in enumerate(L) for v in vs} 
#alternative solution 
#d = {v: i for i in range(len(L)) for v in L[i]} 
print (d) 
{7: 2, 8: 2, 9: 2, 10: 0, 11: 1, 15: 0} 

df['new_column'] = df['a'].map(d) 
print (df) 
    a  b new_column 
0 15 smth   0 
1 10 smth   0 
2 11 smth   1 
3 9 smth   2 
4 7 smth   2 
5 8 smth   2 
+0

ありがとう!これは私に役立ちます=)) – Olga

+0

残念ながら、1つの解決策しか受け入れられない場合、別の解決策がより良かったですか? – jezrael

+0

しかし、あなたはすべての解決策をupvoteすることができます。 – jezrael

関連する問題