过滤模型预测数据框架

时间:2018-07-17 19:42:28

标签: python python-3.x pandas dataframe

我有两个数据框:

lang_df = pd.DataFrame(data = {'Content ID': [1, 1, 2, 2, 3, 3],
                                'User ID': [10, 11, 10, 11, 10, 11],
                                'Language': ['A', 'A', 'B', 'B', 'C', 'C']})

pred_df = pd.DataFrame(data = {'Content ID': [4, 7, 14, 6, 6, 6],
                                'User ID': [10, 11, 10, 11, 10, 11],
                                'Language': ['A', 'D', 'Z', 'B', 'B', 'A']})

我想过滤掉第二个数据框中的行,以便用户仅获得以前观看过的语言的内容ID。此示例的结果如下:

result_df = pd.DataFrame(data = {'Content ID':  [4, 6, 6, 6],
                                    'User ID':  [10, 11, 10, 11],
                                    'Language': ['A', 'B', 'B', 'A']})

我知道如何使用for循环来做到这一点,但这似乎效率很低。不确定如何使DF出现在问题中,以便更清楚。

2 个答案:

答案 0 :(得分:3)

您可以将内部联接与merge配合使用,然后使用列过滤对pred_df数据帧中的返回列进行操作:

pred_df.merge(lang_df, on=['User ID','Language'], suffixes=('','_2'))[pred_df.columns]

输出:

   Content ID  User ID Language
0           4       10        A
1           6       11        B
2           6       10        B
3           6       11        A

答案 1 :(得分:3)

您需要在User IDLanguage的{​​{1}}和lang_df列上进行内部联接。

pred_df

输出:

lang_df[['User ID', 'Language']].merge(pred_df, on=['User ID', 'Language'])