首页 > 解决方案 > 选择多个唯一索引列对形成数据框

问题描述

我正在尝试从两个等长的索引值和列值列表中分割数据帧。例如,假设我有数据框:

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
               columns=['a', 'b', 'c'])
Out[100]: 
   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9

现在,我想从两个数组中的该数据中选择多个索引/列对,一个包含索引值,另一个包含列值。假设我的配对是

x=np.array([0,2])
y=np.array(['a','b'])

我想要的输出是一个包含 2 个值的数组:[1,8]

如果我尝试使用.loc,我会得到每个组合。我想要的是上面的特定对

df.loc[x,y]

Out[106]: 
   a  b
0  1  2
2  7  8

有没有一种简单的方法可以做到这一点而没有混乱的循环?

标签: pythonpandasdataframe

解决方案


您可以利用NumPy 整数索引并使用numpy.searchsorted将选定的列名称“映射”到数字:

>>> df.values[x, np.searchsorted(df.columns, y)]
array([1, 8])

推荐阅读