如何根据另一列的值得到两列组合的所有排列的列表?

2024-10-17 08:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我的最终目标是用d3创建一个Force-Directed graph,它显示在我的应用程序中使用某些特性的用户集群。为此,我需要创建一组具有以下格式的“链接”(取自上述链接):

{"source": "Napoleon", "target": "Myriel", "value": 1}

为了进入这一步,我从如下所示的pandas数据帧开始。如何为每个USER_ID生成APP_NAME/FEAT_ID组合的排列列表?在

^{pr2}$

预期结果:

基于上述数据帧,我希望user1和{}生成以下排列

user1:
    app1-feature1 -> app2-feature2, app2-feature3, app3-feature4, app2-feature5, app2-feature6, app2-feature7, app2-feature8, app2-feature9
    app2-feature2 -> app2-feature3, app3-feature4, app2-feature5, app2-feature6, app2-feature7, app2-feature8, app2-feature9
    app2-feature3 -> app3-feature4, app2-feature5, app2-feature6, app2-feature7, app2-feature8, app2-feature9
    app3-feature4 -> app2-feature5, app2-feature6, app2-feature7, app2-feature8, app2-feature9
    app2-feature5 -> app2-feature6, app2-feature7, app2-feature8, app2-feature9
    app2-feature6 -> app2-feature7, app2-feature8, app2-feature9
    app2-feature7 -> app2-feature8, app2-feature9
    app2-feature8 -> app2-feature9

user2:
    app3-feature10 -> app2-feature2, app2-feature11, app2-feature12
    app2-feature2  -> app2-feature11, app2-feature12
    app2-feature11 -> app2-feature12

由此,我希望能够为D3生成预期的输入,对于user2,这将是这样的。在

{"source": "app3-feature10", "target": "app2-feature2"}
{"source": "app3-feature10", "target": "app2-feature11"}
{"source": "app3-feature10", "target": "app2-feature12"}
{"source": "app2-feature2", "target": "app2-feature11"}
{"source": "app2-feature2", "target": "app2-feature12"}
{"source": "app2-feature11", "target": "app2-feature12"}

如何为数据帧中的每个USER_ID生成APP_NAME/FEAT_ID组合的排列列表?在


Tags: idsourcetargetapp2feature2app3feature4feature7
1条回答
网友
1楼 · 发布于 2024-10-17 08:34:34

我会考虑从数据帧中生成一些元组,然后使用类似于itertools.permutations的方法创建所有排列,然后根据需要制作字典:

import itertools

allUserPermutations = {}

groupedByUser = df.groupby('USER_ID')
for k, g in groupedByUser:

    requisiteColumns = g[['APP_NAME', 'FEAT_ID']]

    # tuples out of dataframe rows
    userCombos = [tuple(x) for x in requisiteColumns.values]

    # this is a generator obj
    userPermutations = itertools.permutations(userCombos, 2)

    # create a list of specified dicts for the current user
    userPermutations = [{'source': s, 'target': tar for s, tar in userPermutations]

    # store the current users specified dicts
    allUserPermutations[k] = userPermutations 

如果置换没有返回所需的行为,您可以尝试其他组合生成器found here。在这个时候,我希望这个策略没有奏效。祝你好运!在

相关问题 更多 >