excel - 将一个数据框与另一个数据框重叠并仅保留新的或更改的行

标签 excel python-3.x pandas dataframe

我有两个看起来像下面这样的 Pandas 数据框:

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 是我的主键):
  • 两个数据框中值不同的所有行必须采用 df1 的值并保留。
  • 必须插入 df1 中存在但 df2 中不存在的所有行。
  • 必须删除两个数据框中包含且相同的所有值。

  • 因此,以上面的示例为例,我最终会得到以下数据框:
    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_only 中是否存在这些行或 both ,然后我们可以过滤掉这些行:

    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
    

    关于excel - 将一个数据框与另一个数据框重叠并仅保留新的或更改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011551/

    相关文章:

    excel - 每 7 行将值增加一 - Excel

    excel - 计算excel中的工作日数

    excel - 通配符所选电子表格名称上的 AVERAGEIF 函数

    python - 从相对时间 df 列构造日期列

    python - 带有 2 行标题并导出到 csv 的 pandas 数据框

    javascript - VBA动态网页抓取Excel

    python - 对 pandas 中的群体进行采样

    python - 如果第一个元组为假,则打印第二个元组的最合适(或最易读但仍然是单行方式)

    用于部署 : comparing two folders to generate delta files to backup and ftp 的 Python 脚本

    python - Pandas/Numpy 根据存在将行移入列