python - 选择多个唯一索引列对形成数据框
问题描述
我正在尝试从两个等长的索引值和列值列表中分割数据帧。例如,假设我有数据框:
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
有没有一种简单的方法可以做到这一点而没有混乱的循环?
解决方案
您可以利用NumPy 整数索引并使用numpy.searchsorted
将选定的列名称“映射”到数字:
>>> df.values[x, np.searchsorted(df.columns, y)]
array([1, 8])