我有两个数据框:
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出现在问题中,以便更清楚。
答案 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 ID
和Language
的{{1}}和lang_df
列上进行内部联接。
pred_df
输出:
lang_df[['User ID', 'Language']].merge(pred_df, on=['User ID', 'Language'])