data = [[12345,"AAA"],[12345,"BBB"],[12345,"CCC"],[98765,"KKK"],[98765,"MMM"],[56321,"JJJ"],[56321,"SSS"],[56321,"PPP"]]
df = pd.DataFrame(data,columns=['Sales_ID','Company_Name'])

大家好,我有上面的数据框,我想在每个 groupby Sales_ID 中创建一个匹配项。我怎么能在python中做到这一点?

我试图对 df 进行分组并为每个 sales_ID 提取所有公司,但不知道下一步该怎么做。
df.groupby('Sales_ID').apply(lambda x:x['Company_Name'].tolist())

预期成绩:
Sales_ID Company Company
12345      AAA   BBB
12345      AAA   CCC
12345      BBB   CCC
98765      KKK   MMM
56321      JJJ   SSS
56321      JJJ   PPP
56321      SSS   PPP

谢谢您的帮助。

最佳答案

我正在使用 itertools

s=df.groupby('Sales_ID',sort=False)['Company_Name'].apply(list)
l=[list(itertools.combinations(x,2)) for x in s]
Newdf=pd.DataFrame({'Sales_ID':s.index.repeat(list(map(len,l)))})
Newdf=pd.concat([Newdf,pd.DataFrame(sum(l,[]))],axis=1)
Newdf
   Sales_ID    0    1
0     12345  AAA  BBB
1     12345  AAA  CCC
2     12345  BBB  CCC
3     98765  KKK  MMM
4     56321  JJJ  SSS
5     56321  JJJ  PPP
6     56321  SSS  PPP

关于python - 如何使用 itertools 提取 groupby 值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57174497/

10-11 12:29