2017-06-23 90 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)