如何在列A和列B中查找每个值的所有出现

时间:2019-01-24 01:23:43

标签: python pandas

使用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列中观察到的值。

1 个答案:

答案 0 :(得分:0)

IIUC

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}