猿问

如何查找 A 列中每个值的所有匹配项,该值也在 B 列中

使用 Pandas,我试图在 A 列中找到某个值的最近重叠出现,该值也恰好在 B 列中(尽管不一定出现在同一行中);这将对 A 列中的所有行进行。


我已经使用 n^2 解决方案完成了一些接近的事情(通过创建每列的列表并使用嵌套的 for 循环进行迭代),但如果可能的话,我想使用更快的方法;因为这需要在包含数万个条目的表中实现。(因此,矢量化解决方案将是理想的,但我更在寻找“正确”的方法来做到这一点。)


df['idx'] = range(0, len(df.index))

A = list(df['r_A'])

B = list(df['r_B'])

A_B_Dict = {}


for i in range(0, len(B)-1):

    for j in range(0, len(A)-1):

        if B[i] == A[j]:

            A_search = df.loc[df['r_A'] == A[j]].index

            A_B_Dict[B[i]] = A_search

鉴于一些 df 像这样:


df = [[1, 'A', 'A'],

      [2, 'B', 'D'],

      [3, 'C', 'B']

      [4, 'D', 'D']

      ]

df = pd.DataFrame(data, columns = ['idx', 'A', 'B'])

它应该返回如下内容:


 A_B_Dict = {'A': 1, 'B': 3, 'C':None', 'D':4}

这样,在 B 列中发生的来自 A 列的最新观察(或所有观察)被存储为值,A_B_Dict其中的键A_B_Dict是在 A 列中观察到的原始值。


狐的传说
浏览 188回答 1
1回答

拉风的咖菲猫

国际大学联盟d=dict(zip(df.B,df.idx))dict(zip(df.A,df.A.map(d))){'A': 1.0, 'B': 3.0, 'C': nan, 'D': 4.0}
随时随地看视频慕课网APP

相关分类

Python
我要回答