2017-06-23 44 views
0

這裏我有一個熊貓數據框架結構的數據,現在我有一個標準值列表,如[1,2,3,4,5]。我想通過搜索條件列表中的數據框以元組或列表的格式提取對應值。例如,如果我想在[1,2,3,4,5]中有Sim =='a'和No,它將返回值:(1,2,3,4,5)。但是如果我想在[1,2,3,4,5]中有Sim =='b'和No,因爲(No == 4)&(Sim =='b')上沒有值,將返回[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

我想你可以通過MultiIndexset_index通過reindex然後另一Multiindex創建from_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)