我有一个df
我必须找到组的所有组合(假设是 2 对),然后必须通过唯一 ID 将它们分组
输出:
目前我找到了一种生成所有组合的方法,但似乎无法按唯一 ID 进行分组
我还引用了以下链接: Pandas find all combinations of rows under a budget
生成对的代码:
from itertools import combinations
li_4 =[]
for index in list(combinations(df.group.unique(),2)):
li_4.append([index[0],index[1]])
最佳答案
我们可以先进行merge
,然后进行np.sort
,并在使用drop_duplicates
删除重复项后将结果传递给crosstab
>
s = df.merge(df,on='Id')
s['New'] = list(map(lambda x : ''.join(x),np.sort(s[['Group_x','Group_y']].values,axis=1).tolist()))
s = s.drop_duplicates(['Id','New'])
s = pd.crosstab(s.Id,s.New)
s
Out[88]:
New aa ab ac ad af bb bc bd be bf cc cd dd de ee ff
Id
2 1 1 1 1 0 1 1 1 0 0 1 1 1 0 0 0
3 0 0 0 0 0 1 0 1 1 0 0 0 1 1 1 0
4 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1
关于python - Pandas 获取行组合和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67595026/