【问题标题】:How to get the cartesian product of a pandas dataframe under certain condition如何在特定条件下获取熊猫数据框的笛卡尔积
【发布时间】:2017-08-09 03:59:36
【问题描述】:

给定一个数据框:

    qid cid title
0    1   a   croc 
1    2   b   dog    
2    3   a   fish
3    4   b   cat
4    5   a   bird

我想获得一个新的数据框,它是每一行与其他行的笛卡尔积,它具有相同的 cid 值(即,获取具有相同 cid 的所有行对):

    cid1 cid2 qid1 title1 qid2 title2
0    a     a    1   croc    3    fish
1    a     a    1   croc    5    bird
2    a     a    3   fish    5    bird
3    b     b    2   dog     4    cat

假设我的数据集大约有 500M,有人能以相对有效的方式解决这个问题吗?

【问题讨论】:

    标签: python pandas dataframe python-3.6 cartesian-product


    【解决方案1】:

    一种方法是使用self merge,然后过滤掉所有不需要的记录。

    df.merge(df, on='cid', suffixes=('1','2')).query('qid1 < qid2')
    

    输出:

        qid1 cid title1  qid2 title2
    1      1   a   croc     3   fish
    2      1   a   croc     5   bird
    5      3   a   fish     5   bird
    10     2   b    dog     4    cat
    

    【讨论】:

    • 那会产生大量数据。虽然这是一个不错的答案 +1
    猜你喜欢
    • 2019-02-07
    • 2022-12-09
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多