2017-06-23 9 views
0

ここで私は[1,2,3,4,5]のような基準値のリストを持つデータのパンダデータフレーム構造を持っています。私は、基準リストのデータフレームを検索することによって、タプルまたはリストの形式で対応する値を抽出したいと思います。は、パンダのヌルデータを含む検索結果のタプルを生成します

たとえば、[1,2,3,4,5]にSim == 'a'とNoを設定したい場合、値:(1,2,3,4,5)を返します。しかし、No = 4の&(Sim == 'b')に値がないので、Sim == 'b'とNoを[1,2,3,4,5]に入れたい場合は、 [7,8,9、 ''、10]または[7,8,9、nan、10]を返します。

効率的な方法はありますか?多くのおかげで

>>> df 
    No Sim Value 
0 0 a  0 
1 1 a  1 
2 2 a  2 
3 3 a  3 
4 4 a  4 
5 5 a  5 
6 0 b  6 
7 1 b  7 
8 2 b  8 
9 3 b  9 
10 5 b  10 

答えて

0

私はあなたがset_indexMultiIndexを作成することができると思うし、別のMultiindexによってreindexfrom_productを作成しました:

def get_tuple(df, no, sim): 
    df1 = df.set_index(['No','Sim']).sort_index() 
    return tuple(df1['Value'].reindex(index=pd.MultiIndex.from_product([no,[sim]])).tolist()) 


print (get_tuple(df, [1,2,3,4,5], 'a')) 
(1, 2, 3, 4, 5) 

print (get_tuple(df, [1,2,3,4,5], 'b')) 
(7.0, 8.0, 9.0, nan, 10.0) 
+0

多くの感謝を。それをやっているのは素晴らしい方法です – lkonweb

0
tuple(df.set_index(
     ['No', 'Sim'] 
    ).Value.astype(object).unstack().loc[[1,2,3,4,5], 'a'] 
) 

(1, 2, 3, 4, 5) 

tuple(df.set_index(
     ['No', 'Sim'] 
    ).Value.astype(object).unstack().loc[[1,2,3,4,5], 'b'] 
) 

(7, 8, 9, None, 10) 
関連する問題