Excel-Spreadsh中的组合数学二集

2024-10-03 06:23:39 发布

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

很难解释,但我会尝试一下,因为我卡住了。你知道吗

我使用NodeXL查看数据集中的关系。基本上我有一些主题,然后是这些主题的子主题,我需要一个列表,列出每个主题的所有可能的子主题组合,但每个组合最多只有两个变量(会有重复的组合,因为有多个主题,我想看看哪些组合是最常见的)。你知道吗

这是一个例子

输入:

Topic   Subtopic
G/xxx1   Banana
G/xxx1   Apple
G/xxx1   Pear
G/xxx1   Grape
G/xxx2   Banana
G/xxx2   Grape
G/xxx2   Pear

输出

A        B
Banana   Apple
Banana   Pear
Banana   Grape
Apple    Pear
Apple    Grape
Pear     Grape

Banana   Grape
Banana   Pear
Grape    Pear

我希望这是有意义的,我会非常感谢,如果有人有一个很好的方式做这件事。我不能手动操作,因为我有成千上万的主题。你知道吗


Tags: 数据apple主题列表topic关系例子banana
1条回答
网友
1楼 · 发布于 2024-10-03 06:23:39

我是用csv格式做的,但是你可以调整它。我将如何做(使用pandas读取数据帧):

import pandas as pd

df = pd.read_csv("data.csv")

combinations = []
for index, subset in df.groupby("Topic"):
    subtopics = list(subset["Subtopic"])
    n = len(subtopics)
    for i in range(n):
        for j in range(i):
            combinations.append(2(subtopics[i],subtopics[j]))

print combinations
print len(combinations)

无论如何,创建所有对的最佳方法。我正在研究第二种可能的解决方案。将尽快发布;)

编辑:

下面是我的第二个解决方案(仍在使用熊猫):

作为pd导入

df = pd.read_csv("data.csv")
indexedDF = df.reset_index().set_index("Topic")
mergedDF = pd.merge(indexedDF,indexedDF, left_index=True, right_index=True)
finalDF = mergedDF[mergedDF["index_x"] > mergedDF["index_y"]]

print finalDF

相关问题 更多 >