在熊猫中自我加入后获得id组合明显的记录



我有一个pandas数据帧df。它有列setid、id和label。我想成对比较id标签值。我已经尝试过进行如下所示的自连接,但这最终会为id的每个排列提供额外的记录。我只想为id的每一个不同组合提供一个记录。我在下面用数据勾勒出了一些例子,以说明我试图实现的目标。有人能提出巧妙的方法吗?

df

setid id label
1     1  a
1     2  b

如果我在setid 上加入它

import pandas as pd
pd.merge(df,df, how='inner', on=['setid']).head()
setid id_x id_y label_x label_y
1     1    1    a       a
1     1    2    a       b
1     2    2    b       b
1     2    1    b       a

但我只想要id的每个组合的一个版本,例如下面的输出

setid id_x id_y label_x label_y
1     1    1    a       a
1     1    2    a       b
1     2    2    b       b

您可以使用np.sort

df1=pd.merge(df,df, how='inner', on=['setid']).head()
df1[['label_x', 'label_y']]=np.sort(df1.filter(like='label').values, axis=1)
df1=df1.drop_duplicates(subset=['label_x','label_y'])
df1

最新更新