试图将ID分配给pandas DataFrame中的对,结果不一致



我有一个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)

最新更新