根据另一个中的索引和值访问数据框中的值

时间:2017-09-04 03:44:43

标签: python pandas dataframe indexing

如何根据索引和标题列表从数据框中获取值?

这些是我拥有的数据框:

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]

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:2)

使用列表理解的另一种方法:

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

答案 3 :(得分: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])