比较两列和 return Python 中的行号
Compare two columns and return the row numbers in Python
我有两列 A = [11, 24, 7, 7, 0, 4, 9, 20, 3, 5] 和 B = [5, 8, 9, 1, 11]。但是他们有不同的行号。我想查找 A 是否具有与 B 相同的元素以及 return A 和 B 的行号。例如,
A 和 B 具有相同的值 5,9,11 并且 returned 矩阵是 C = [5, 9, 11]
A的returned行号应该是row_A = [9,6,0]
B的returned行号应该是row_B = [0, 2, 4]
python有什么功能可以用吗?
谢谢
这是numpy.intersect1d
。使用 return_indices
参数,除了值之外,您还可以获得索引。如果 A/B 是 numpy 数组、pandas 系列或列表,这将起作用。
请注意,如果您的对象是 pandas 对象,则返回的索引是数组索引。因此,如果您的 Series 没有从 0 开始的 RangeIndex,您可以按数组位置对它们的 Index 对象进行切片以获取实际的 Series Index 标签。
import numpy as np
vals, idxA, idxB = np.intersect1d(A, B, return_indices=True)
vals
#array([ 5, 9, 11])
idxA
#array([9, 6, 0])
idxB
#array([0, 2, 4])
如果你有两个不同的数据框,
在另一列中为每个复制索引并加入列:
df_A["index"] = df.index
df_B["index"] = df.index
df_A.merge(df_B, left_on="A", right_on="B", how="inner")
df = pd.DataFrame(data = {"A":[11, 24, 7, 7, 0, 4, 9, 20, 3, 5], "B" : [5, 8, 9, 1, 11, -1,-1,-1,-1,-1]})
df_A = df[["A"]]
df_A["index"] = df.index
df_B = df[["B"]]
df_B["index"] = df.index
df_A.merge(df_B, left_on="A", right_on="B", how="inner")
我有两列 A = [11, 24, 7, 7, 0, 4, 9, 20, 3, 5] 和 B = [5, 8, 9, 1, 11]。但是他们有不同的行号。我想查找 A 是否具有与 B 相同的元素以及 return A 和 B 的行号。例如,
A 和 B 具有相同的值 5,9,11 并且 returned 矩阵是 C = [5, 9, 11]
A的returned行号应该是row_A = [9,6,0]
B的returned行号应该是row_B = [0, 2, 4]
python有什么功能可以用吗? 谢谢
这是numpy.intersect1d
。使用 return_indices
参数,除了值之外,您还可以获得索引。如果 A/B 是 numpy 数组、pandas 系列或列表,这将起作用。
请注意,如果您的对象是 pandas 对象,则返回的索引是数组索引。因此,如果您的 Series 没有从 0 开始的 RangeIndex,您可以按数组位置对它们的 Index 对象进行切片以获取实际的 Series Index 标签。
import numpy as np
vals, idxA, idxB = np.intersect1d(A, B, return_indices=True)
vals
#array([ 5, 9, 11])
idxA
#array([9, 6, 0])
idxB
#array([0, 2, 4])
如果你有两个不同的数据框, 在另一列中为每个复制索引并加入列:
df_A["index"] = df.index
df_B["index"] = df.index
df_A.merge(df_B, left_on="A", right_on="B", how="inner")
df = pd.DataFrame(data = {"A":[11, 24, 7, 7, 0, 4, 9, 20, 3, 5], "B" : [5, 8, 9, 1, 11, -1,-1,-1,-1,-1]})
df_A = df[["A"]]
df_A["index"] = df.index
df_B = df[["B"]]
df_B["index"] = df.index
df_A.merge(df_B, left_on="A", right_on="B", how="inner")