遍历不同的Excel工作表并使用熊猫查找所有可能的连接

时间:2019-05-11 01:17:54

标签: python pandas

我有3个excel文件,每个文件一张。每个excel文件看起来都像这样〜file

file2

我需要遍历各列的名称并找到名称之间的连接。

我认为我需要在单独的列中为每个名称添加ID,但是不确定如何在熊猫中执行此操作。我不确定这是否是开始解决此问题的最佳方法。我尝试过:

df = df.assign(id= 
(all_data["index1"]).astype('category').cat.codes)

3个excel文件中的第一列包含相同的名称,但其他列中包含不同的动物。我想遍历3个excel文件中的名称,并在人与动物之间存在匹配项时将其存储/计为1个连接。 使用提供的2个示例,将有一个联系:joe smith和jack smith(他们有共同的“狗”和“熊猫”)。

对于最终结果,我想我希望列出所有可能的连接。任何想法都会有所帮助!

1 个答案:

答案 0 :(得分:0)

这就是我要做的,但是,我必须做一些假设。

1)每张纸都正确地作为df导入

2)您想查看所有动物和所有名称的所有匹配项,因此,我将创建一个字典,其中键为动物,名称为值。

# Random dfs with random names and animals.
df1 = pd.DataFrame({'Name': ['Joe', 'Jack', 'Molly'], 'Animal1': ['Dog', 'Cat', 'Mouse'], 'Animal2': ['Panda', 'Lion', 'Koala']})
df2 = pd.DataFrame({'Name': ['Ben', 'Bob', 'Blake'], 'Animal1': ['Rhino', 'Panda', 'Dog'], 'Animal2': ['Snake', 'Spider', 'Cat']})

我们将df合并为1,以便将所有名称和动物放在同一df上。

df3 = pd.concat([df1,df2])

    Name  Animal1 Animal2
0   Joe     Dog    Panda
1   Jack    Cat    Lion

接下来,将为所有动物制作一个专栏。这些动物将最终进入“值”列。

df3 = pd.melt(df3, id_vars=['Name'], value_vars=['Animal1', 'Animal2'])

    Name   variable value
0   Joe     Animal1 Dog
1   Jack    Animal1 Cat
2   Molly   Animal1 Mouse

最后,我们将按动物分组,并使其成为字典。

df3.groupby('value')['Name'].apply(list).to_dict()

输出:

{'Cat': ['Jack', 'Blake'],
 'Dog': ['Joe', 'Blake'],
 'Koala': ['Molly'],
 'Lion': ['Jack'],
 'Mouse': ['Molly'],
 'Panda': ['Bob', 'Joe'],
 'Rhino': ['Ben'],
 'Snake': ['Ben'],
 'Spider': ['Bob']}