Python 获取与数组元素相同的行的DataFrame索引

Python 获取与数组元素相同的行的DataFrame索引,python,pandas,dataframe,numpy,Python,Pandas,Dataframe,Numpy,我有一个数据帧(temp)和一个数组(x),它们的元素对应于数据帧的一些行。我想获得数据帧的索引,其对应的记录与数组的元素相同: 例如: temp = pd.DataFrame({"A": [1,2,3,4], "B": [4,5,6,7], "C": [7,8,9,10]}) A B C 0 1 4 7 1 2 5 8 2 3 6 9 3 4 7 10 x = np

我有一个数据帧(temp)和一个数组(x),它们的元素对应于数据帧的一些行。我想获得数据帧的索引,其对应的记录与数组的元素相同:

例如:

 temp = pd.DataFrame({"A": [1,2,3,4], "B": [4,5,6,7], "C": [7,8,9,10]})

    A   B   C
0   1   4   7
1   2   5   8
2   3   6   9
3   4   7   10

x = np.array([[1,4,7], [3,6,9]])
它应该返回索引:0和2

我尝试过这个,但没有成功:

temp.loc[temp.isin(x[0])].index

我将转换为多索引,然后使用
np转换为isin。其中

i = pd.MultiIndex.from_frame(temp[['A','B','C']])
out = np.where(i.isin(pd.MultiIndex.from_arrays(x.T)))[0]

或使用合并:

cols = ['A','B','C']
out = temp.reset_index().merge(pd.DataFrame(x,columns=cols)).loc[:,'index'].tolist()
或者使用
np.isin
all

out = temp.index[np.isin(temp[['A','B','C']],x).all(1)]

我将转换为多索引,然后使用
np转换为isin。其中

i = pd.MultiIndex.from_frame(temp[['A','B','C']])
out = np.where(i.isin(pd.MultiIndex.from_arrays(x.T)))[0]

或使用合并:

cols = ['A','B','C']
out = temp.reset_index().merge(pd.DataFrame(x,columns=cols)).loc[:,'index'].tolist()
或者使用
np.isin
all

out = temp.index[np.isin(temp[['A','B','C']],x).all(1)]

由于需要将
数据帧的整行
numpy数组中的行
匹配,因此可以将数据帧转换为数组,然后使用enumerate循环并返回索引:

temp_arr = temp.to_numpy()

for idx, row in enumerate(temp_arr):
    if row in x:
        print(idx)
输出:

0
2
[0, 2]
使用列表理解的更优雅的方法是:

idx_list = [i for i, row in enumerate(temp_arr) if row in x ]    
print(idx_list)
输出:

0
2
[0, 2]

由于需要将
数据帧的整行
numpy数组中的行
匹配,因此可以将数据帧转换为数组,然后使用enumerate循环并返回索引:

temp_arr = temp.to_numpy()

for idx, row in enumerate(temp_arr):
    if row in x:
        print(idx)
输出:

0
2
[0, 2]
使用列表理解的更优雅的方法是:

idx_list = [i for i, row in enumerate(temp_arr) if row in x ]    
print(idx_list)
输出:

0
2
[0, 2]

使用numpy广播:

array=temp.to_numpy()[:,无]
掩码=(数组==x).all(轴=-1).any(轴=-1)
温度指数[遮罩]

使用numpy广播:

array=temp.to_numpy()[:,无]
掩码=(数组==x).all(轴=-1).any(轴=-1)
温度指数[遮罩]

@user140259对不起,我没有understand@user140259它检查轴1中的所有元素是否为True,否则返回False。@user140259抱歉,我没有understand@user140259它检查轴1中的所有元素是否为真,否则返回假。您的解决方案是通用的,并且工作正常。我举了一个简单的例子,但应用到我的实际案例中,其他答案给出了错误的值(这可能是因为在我的实际案例中,索引不是从0开始的,而是从1开始的,这可能是因为数据帧中的重复记录,我必须更详细地检查)。你的答案正确!!非常感谢。您的解决方案是通用的,并且运行良好。我举了一个简单的例子,但应用到我的实际案例中,其他答案给出了错误的值(这可能是因为在我的实际案例中,索引不是从0开始的,而是从1开始的,这可能是因为数据帧中的重复记录,我必须更详细地检查)。你的答案正确!!非常感谢。