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