获取两个DataFrame相同列的笛卡尔值

时间:2018-02-11 13:34:27

标签: python pandas cartesian-product

修改和更新

我更改了数据表示例,我希望尽可能干净,所以我编辑了我的问题!!

我有两个相同的DataFrame。

首先是customer_watched,第二个是future_programs

每个客户都有一个数据库监控程序,我还有一个未来的列表,所以我的想法是比较两个DataFrame之间的名称相似性(这是基本的,因为我的程序是相同的)

我需要比较每个表标题by one by的相似性。我试图获得Cartesian获取所有title列并生成笛卡尔但数据很大而且我有这么多客户所以这不是一个好主意。

以下是表格示例:

customer_watched:

┌───────────────────────────────────────┬──────────────────────────────────────────────┬──────────┐
│                 title                 │                    genre                     │   Time   │
├───────────────────────────────────────┼──────────────────────────────────────────────┼──────────┤
│ Regret to Inform                      │ Documentary                                  │ 14:04:39 │
│ Fool There Was.                       │ Drama                                        │ 20:29:59 │
│ Hellraiser: Hellseeker                │ Horror                                       │ 5:56:38  │
│ Bride & Prejudice                     │ Romance                                      │ 6:25:13  │
│ Bear, The (Ours, L')                  │ Adventure                                    │ 18:26:25 │
│ Groundstar Conspiracy, The            │ Romance                                      │ 17:28:12 │
│ Love's Long Journey                   │ Romance                                      │ 4:06:29  │
│ Late Bloomers                         │ Comedy                                       │ 5:12:00  │
│ Kings Row                             │ Drama                                        │ 9:55:58  │
│ Human Resources (Ressources humaines) │ Drama                                        │ 22:45:15 │
└───────────────────────────────────────┴──────────────────────────────────────────────┴──────────┘

future_programs:

┌─────────────────────────────┬───────────────────────────────┬──────────┐
│            title            │             genre             │   Time   │
├─────────────────────────────┼───────────────────────────────┼──────────┤
│ Ronde, La                   │ Drama                         │ 20:20:25 │
│ Safe House                  │ Action                        │ 18:15:58 │
│ Cypher                      │ Action                        │ 12:39:25 │
│ First Love (Primo Amore)    │ Drama                         │ 4:40:08  │
│ Half Light                  │ Romance                       │ 5:23:57  │
│ Waiting for Forever         │ Drama                         │ 7:51:36  │
│ Vice Squad                  │ Action                        │ 13:40:18 │
│ August Mordum's Underground │ Horror                        │ 11:13:35 │
│ Taxi Driver                 │ Crime                         │ 15:00:12 │
│ $ (Dollars)                 │ Comedy                        │ 9:52:49  │
└─────────────────────────────┴───────────────────────────────┴──────────┘

节目标题仅与genre相关,因此当您将标题与其他类型标题进行比较时,这是毫无意义的,因此需要特定的笛卡尔循环。

当我写一个客户名称时,我的程序会给我一些观看的节目和顶级类型,例如:

top_genre

title     genre

drama     19
romance   7
comedy    1

所以我们不必比较任何其他标题,所以这个客户喜欢drama所以当我比较客户观看和未来的列表时,我只想要戏剧标题笛卡尔列表并比较标题。

Ex:  


Fool There Was                               -    Ronde, La 
Fool There Was                               -    First Love (Primo Amore)
Fool There Was                               -    Waiting for Forever
Kings Row                                    -    Ronde, La 
Kings Row                                    -    First Love (Primo Amore)
Kings Row                                    -    Waiting for Forever
Human Resources (Ressources humaines)        -    Ronde, La 
Human Resources (Ressources humaines)        -    First Love (Primo Amore)
Human Resources (Ressources humaines)        -    Waiting for Forever

future_proframs列表相同,但customer_watchedtop_genre对每位客户都有所不同。

我的问题是如何制作一个功能top_genrecustomer_watched,并与每个客户的future_list进行比较?

我将此功能用于笛卡尔列表,但正如我所写,这使得所有标题进行比较:

def cartesian(df1, df2):
    rows = itertools.product(df1.iterrows(), df2.iterrows())

    df = pd.DataFrame(left.append(right) for (_, left), (_, right) in rows)
    return df.reset_index(drop=True)

我尝试了很多选项,但我无法管理。

提前致谢。

0 个答案:

没有答案