首页 > 解决方案 > 将数据框与包含它的较大数据框相交并删除公共行

问题描述

我有两个数据框:

df_small = pd.DataFrame(np.array([[1, 2, 3], 
                                  [4, 5, 6], 
                                  [7, 8, 9]]),
                     columns=['a', 'b', 'c'])

df_large = pd.DataFrame(np.array([[22, 1, 2, 3, 99], 
                                  [31, 4, 5, 6, 75], 
                                  [73, 7, 8, 9, 23],
                                  [16, 2, 1, 2, 13],
                                  [17, 1, 4, 3, 25],
                                  [93, 3, 2, 8, 18]]),
                     columns=['k', 'a', 'b', 'c', 'd'])

现在我想要的是使两者相交,并且只取df_large不包含来自的行的行df_small,因此结果应该是:

df_result = pd.DataFrame(np.array([[16, 2, 1, 2, 13],
                                   [17, 1, 4, 3, 25],
                                   [93, 3, 2, 8, 18]]),
                     columns=['k', 'a', 'b', 'c', 'd'])

标签: pandasdataframeintersection

解决方案


使用DataFrame.merge

df_large.merge(df_small,how='outer',indicator=True).query('_merge == "left_only"').drop('_merge', axis=1)

输出:

    k  a  b  c   d
3  16  2  1  2  13
4  17  1  4  3  25
5  93  3  2  8  18

推荐阅读