Python 基于关键点行查找跨轴的第一个复制

Python 基于关键点行查找跨轴的第一个复制,python,pandas,Python,Pandas,这是我的数据帧 [代码>df=pd.数据帧({0:代码>df=D层)的数据帧({0:{码>D层)的数据帧({0:{码>D层)的数据帧({0:1:1:1:7,1:7,1:7,1:1,1:1,1:7,2:2,5:2,5:7,5:7},1,1:6,2:6,2:4,3,3,3:5,5,4:5,4,5,4,4,4,4,4,4,4,4,4:5,4,4,4:5,4,4,4:4,4,4,4,4:4,4,4,4:3,4,4,3,3,3,3,5:3,3,3,3,5,5,5,5:3,5,5,5,5,5,5,5,5,}

这是我的数据帧

[代码>df=pd.数据帧({0:代码>df=D层)的数据帧({0:{码>D层)的数据帧({0:{码>D层)的数据帧({0:1:1:1:7,1:7,1:7,1:1,1:1,1:7,2:2,5:2,5:7,5:7},1,1:6,2:6,2:4,3,3,3:5,5,4:5,4,5,4,4,4,4,4,4,4,4,4:5,4,4,4:5,4,4,4:4,4,4,4,4:4,4,4,4:3,4,4,3,3,3,3,5:3,3,3,3,5,5,5,5:3,5,5,5,5,5,5,5,5,},6:{'key':3,1:3,2:7,3:6,4:6,5:1},7:{'key':4,1:2,2:6,3:3,4:7,5:2},8:{'key':3,1:1,2:7,3:4,4:6,5:3},9:{'key':6,1:2,2:6,3:5,4:3,5:6})

我需要找到相关索引与从左到右的键行相匹配的列

例如,在索引1中,第6列与键行具有相同的值,索引2与第9列的键行匹配,之前没有值。相同的逻辑可应用于索引3、4和5

我只需要索引与键值匹配的第一个实例,之后的所有值都无关紧要

预期产量


      0   1   2   3   4   5   6   7   8   9   trace
key   2   3   4   3   6   2   3   4   3   6   NaN
1     7   6   3   4   5   4   3   2   1   2   6
2     5   4   3   2   3   6   7   6   7   6   9
3     4   5   4   3   6   7   6   3   4   5   2
4     2   3   4   5   4   3   6   7   6   3   0
5     7   6   3   4   3   2   1   2   3   6   5
我尝试了许多的变体,但似乎没有任何效果。

您可以这样做:

import numpy as np

matching_column_indices = np.empty(len(df))
matching_column_indices[0] = np.nan

for row_index in range(1, len(df)):
    row_matching_column_indices = df.loc[row_index] == df.loc["key"] 
    matching_column_indices[row_index] = row_matching_column_indices.idxmax()

df["trace"] = matching_column_indices
row\u matching\u column\u index.idxmax()
返回观察到的第一个
True
值的列索引,对应于
row\u index
处的行与
键之间的列中的第一个匹配

结果
df

     0  1  2  3  4  5  6  7  8  9  trace
key  2  3  4  3  6  2  3  4  3  6    NaN
1    7  6  3  4  5  4  3  2  1  2    6.0
2    5  4  3  2  3  6  7  6  7  6    9.0
3    4  5  4  3  6  7  6  3  4  5    2.0
4    2  3  4  5  4  3  6  7  6  3    0.0
5    7  6  3  4  3  2  1  2  3  6    5.0
在检查df中的值与键行相等(
eq
)的位置后,可以沿列使用with axis

df["trace"] = df.iloc[1:, :].eq(df.loc['key', :]).idxmax(axis=1)
print (df)
     0  1  2  3  4  5  6  7  8  9  trace
key  2  3  4  3  6  2  3  4  3  6    NaN
1    7  6  3  4  5  4  3  2  1  2    6.0
2    5  4  3  2  3  6  7  6  7  6    9.0
3    4  5  4  3  6  7  6  3  4  5    2.0
4    2  3  4  5  4  3  6  7  6  3    0.0
5    7  6  3  4  3  2  1  2  3  6    5.0

问题不清楚搜索的是什么。可能你需要放一些图片来显示一些搜索(index1和index2)我不确定什么不清楚,但我得到了我想要的答案。谢谢你的尝试。你的解决方案确实有效,但我在处理熊猫时总是尽量避免
for
循环
df["trace"] = df.iloc[1:, :].eq(df.loc['key', :]).idxmax(axis=1)
print (df)
     0  1  2  3  4  5  6  7  8  9  trace
key  2  3  4  3  6  2  3  4  3  6    NaN
1    7  6  3  4  5  4  3  2  1  2    6.0
2    5  4  3  2  3  6  7  6  7  6    9.0
3    4  5  4  3  6  7  6  3  4  5    2.0
4    2  3  4  5  4  3  6  7  6  3    0.0
5    7  6  3  4  3  2  1  2  3  6    5.0