2017-09-04 65 views
1

如何根據索引和標頭列表從數據幀中獲取值?根據索引和另一個值訪問數據幀中的值

這些都是dataframes我有:

a = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a','b','c']) 
referencingDf = pd.DataFrame(['c','c','b']) 

基於同樣的指數,我試圖得到以下數據幀輸出:

outputDf = pd.DataFrame([3,6,8]) 

目前,我試過,但需要取對角線值。敢肯定有這樣做的更好的辦法:

a.loc[referencingDf.index.values, referencingDf[:][0].values] 
+0

等等,你是否想要'a [referencingDf [0]]'? – DyZ

+0

yeap,多數民衆贊成在正確的! – smallcat31

+0

然後,你又有什麼問題了? – DyZ

回答

2

IIUC,你可以在列表解析使用df.get_value

vals = [a.get_value(*x) for x in referencingDf.reset_index().values] 
# a simplification would be [ ... for x in enumerate(referencingDf[0])] - DYZ 
print(vals) 
[3, 6, 8] 

然後構造一個數據幀。

df = pd.DataFrame(vals) 
print(df) 

    0 
0 3 
1 6 
2 8 
+0

'... for枚舉中的x(referencingDf [0])'? – DyZ

+0

@DYZ絕對是另一種選擇,假設'referencingDf'具有列的rangeIndex(可能不總是如此)。 –

2

使用列表理解另一種方式:

vals = [a.loc[i,j] for i,j in enumerate(referencingDf[0])] 
# [3, 6, 8] 
4

您需要lookup

b = a.lookup(a.index, referencingDf[0]) 
print (b) 
[3 6 8] 

df1 = pd.DataFrame({'vals':b}, index=a.index) 
print (df1) 
    vals 
0  3 
1  6 
2  8 
0

下面是一個使用column_index,然後索引NumPy's advanced-indexing一個量化的方法和提取過各的值一排數據幀 -

In [177]: col_idx = column_index(a, referencingDf.values.ravel()) 

In [178]: a.values[np.arange(len(col_idx)), col_idx] 
Out[178]: array([3, 6, 8]) 
相關問題