我有3个excel文件,每个文件一张。每个excel文件看起来都像这样〜file
我需要遍历各列的名称并找到名称之间的连接。
我认为我需要在单独的列中为每个名称添加ID,但是不确定如何在熊猫中执行此操作。我不确定这是否是开始解决此问题的最佳方法。我尝试过:
df = df.assign(id=
(all_data["index1"]).astype('category').cat.codes)
3个excel文件中的第一列包含相同的名称,但其他列中包含不同的动物。我想遍历3个excel文件中的名称,并在人与动物之间存在匹配项时将其存储/计为1个连接。 使用提供的2个示例,将有一个联系:joe smith和jack smith(他们有共同的“狗”和“熊猫”)。
对于最终结果,我想我希望列出所有可能的连接。任何想法都会有所帮助!
答案 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']}