Python中两个数据框的笛卡尔积

时间:2019-12-02 06:32:25

标签: python python-3.x dataframe

我有两个数据框,如何从笛卡尔数据集中删除相似的行

 **DF1:**
    Index    Name
    0       xyz
    1       abc
    2       def


    **DF2:**
    Index    Name
    0       xyz
    1       abc
    2       xyz


    **Expected Output**
    (0,0),**(0,2)**
    (1,1)

我只想组合名称列相同的索引,但是我不想显示重复的组合。也就是说,当我执行笛卡尔索引(0,2)和(2,0)时,会得到相同的结果。所以我只想显示一行。

已更新:

我已经有一个笛卡尔数据框作为输入,这是 (0,0),(0,2),(1,1),(2,0)

我想要的是,我想从此输入数据框中删除重复的(2,0)。而且我在数据框中大约有100行,所以也想循环遍历。

1 个答案:

答案 0 :(得分:1)

假设df1df2只有一列“名称”,并且“索引”是索引,并且您想要一个具有匹配索引的元组列表,如问题中所示,您可以这样做:

df1 = pd.DataFrame({'Name': ['xyz', 'abc', 'def']})
df2 = pd.DataFrame({'Name': ['xyz', 'abc', 'xyz']})
df3 = df1.reset_index().merge(df2.reset_index(), on='Name', how='inner')
list_of_tuples = [tuple(item) for item in df3[['index_x', 'index_y']].values]
list_of_tuples 
# OUTPUT: [(0, 0), (0, 2), (1, 1)]

如果“索引”是列名,只需删除reset_index()命令。