将一个数据帧与另一个数据帧叠加,并仅保留新行或更改的行



我有两个熊猫数据帧,如下所示:

DF1:

RecorderID    GroupID    Location    ...    SomeColumn
CT-1000001    BV-        Cape Town          SomeValue
CT-1000002    MP-        Johannesburg       SomeValue
CT-1000003    BV-        Durban             SomeValue

DF2:

RecorderID    GroupID    Location    ...    SomeColumn
CT-1000001    BV-        Durban      ...    SomeValue
CT-1000003    BV-        Durban      ...    SomeValue

这两个数据帧实际上很大,有许多列和许多行。我想比较两个数据帧,并以一个数据帧完成以下操作(RecorderID 是我的主键):

  1. 两个数据帧中值不同的所有行都必须采用 df1 的值并保留。
  2. 必须插入 df1 中存在但在 df2 中不存在的所有行。
  3. 必须删除两个数据帧中包含的所有
  4. 值且相同的值。

因此,以上面的例子为例,我最终会得到以下数据帧:

RecorderID    GroupID    Location    ...    SomeColumn
CT-1000001    BV-        Cape Town          SomeValue
CT-1000002    MP-        Johannesburg       SomeValue

PS:我注意到将数据框写出到Excel时,它会插入索引列作为第一列。如何指定 RecorderID 是我的主键,并且它应该使用它来索引值?我试过:

df = read_excel('file.xlsx', 'sheet1', index_col='RecorderID')

但这只会删除 RecorderID 列,并在我将其写出到 excel 时添加一个编号索引列。

谢谢!

如果您

运行的是最新版本的pandas,则可以merge并指定要left的合并方法,此外,我们可以设置indicator=True这将添加一个列_merge,您将判断行是否存在于left_onlyboth中,然后我们可以过滤掉这些行:

In [91]:
merged = pd.merge(df1,df2,indicator=True, how='left' )
merged
Out[91]:
   RecorderID GroupID      Location SomeColumn     _merge
0  CT-1000001     BV-     Cape Town  SomeValue  left_only
1  CT-1000002     MP-  Johannesburg  SomeValue  left_only
2  CT-1000003     BV-        Durban  SomeValue       both
In [92]:
merged[merged['_merge'] == 'left_only']
Out[92]:
   RecorderID GroupID      Location SomeColumn     _merge
0  CT-1000001     BV-     Cape Town  SomeValue  left_only
1  CT-1000002     MP-  Johannesburg  SomeValue  left_only

最新更新