通过为数据帧之间的每个重复行仅删除一行来合并两个数据帧

2024-05-13 03:11:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,我正在合并它。合并时,应删除重复项。但对于第1帧中的一个重复行,它应该只删除第2帧中的一个重复行,即使有两个这样的行,如下所示 df1:

colA colB colC
  1    2    3
  1    1    2
  1    5    4

df2:

colA colB colC
 1    2    3
 1    2    3
 1    1    2

结果:

colA colB colC
 1    2    3
 1    5    4

这里,从两个数据帧中删除了1组1 2 3数据集(但保留了另一组1 2 3数据集)。1 2集已从两个数据帧中删除。1由于在df2中未找到匹配项,因此保留了5 4组

有没有办法在熊猫身上实现这一点


Tags: 数据df1df2另一组办法colccolbcola
2条回答

这是一种方式:

import pandas as pd

df1 = pd.DataFrame({'colA': [1, 1, 1],
                    'colB': [2, 1, 5],
                    'colC': [3, 2, 4]})

df2 = pd.DataFrame({'colA': [1, 1, 1],
                    'colB': [2, 2, 1],
                    'colC': [3, 3, 2]})

df1 = df1.groupby(['colA', 'colB', 'colC']).size().reset_index(name='count1')
df2 = df2.groupby(['colA', 'colB', 'colC']).size().reset_index(name='count2')

df_merged = pd.concat((df1, df2)).fillna(0)

df_final = df_merged.groupby(['colA', 'colB', 'colC'])\
    .apply(lambda x: x['count2'].sum() - x['count1'].sum())\
    .loc[lambda p: p != 0]\
    .reset_index()\
    .drop(0, axis=1)

print(df_final)

输出:

   colA  colB  colC
0     1     2     3
1     1     5     4

最后我通过下面的方法得到了答案。大卫的回答也很有魅力

result1 = result.groupby(['colA','colB','colC'], as_index=False).size()
result1 = result1[result1['size'] % 2 != 0]

相关问题 更多 >