Python 获取与数组元素相同的行的DataFrame索引
我有一个数据帧(temp)和一个数组(x),它们的元素对应于数据帧的一些行。我想获得数据帧的索引,其对应的记录与数组的元素相同: 例如: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 = 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开始的,这可能是因为数据帧中的重复记录,我必须更详细地检查)。你的答案正确!!非常感谢。