我有一个df:
df = pd.DataFrame({'src':['LV','LA','NC','NY','ABC','XYZ'], 'dest':['NC','NY','LV','LA','XYZ','ABC'], 'dummy':[1,3,6,7,8,10]})
src dest dummy
LV NC 1
LA NY 3
NC LV 6
NY LA 7
ABC XYZ 8
XYZ ABC 10
我浏览了一遍:
df['pair'] = df[['src', 'dest']].apply(lambda x : tuple(set(x)), 1).factorize()[0] + 1
尝试关闭唯一的对,如(a->b,b->a(
我正确地结束了这个:
src dest dummy pair
LV NC 1 1
LA NY 3 2
NC LV 6 1
NY LA 7 2
ABC XYZ 8 3
XYZ ABC 10 3
然而,有时当我运行它时,我会错误地使用以下内容:
src dest dummy pair
LV NC 1 1
LA NY 3 2
NC LV 6 1
NY LA 7 2
ABC XYZ 8 3
XYZ ABC 10 4
正如您所看到的,由于某种原因,最后一个元素没有正确地键控到对"3"。这种情况是随机发生的。我可以通过注释掉"配对"代码来重现这一点,运行脚本来制作和打印df,然后取消注释并重试。通过运行其他修改,您可能能够以其他方式重现这一点。
如何修复这种不确定的行为?
尝试使用这是set
的问题,您可以将其更改为frozenset
df['pair'] = pd.DataFrame(np.sort(df[['src','dest']].values,1)).agg(tuple,1).factorize()[0]+1
Out[108]: array([1, 2, 1, 2, 3, 3], dtype=int64)