首页 > 解决方案 > 从更新的数据框中识别修改的行

问题描述

我收集数据并分析。在这种情况下,有时像昨天或上周那样收集的数据缺少一个值,并且可能会在以后有可用记录时更新,或者行值可能会更改。我的意思是可能会修改行值,请参阅示例数据框:

接收的第一个数据帧

import pandas as pd

cars = {'Date': ['2020-09-11','2020-10-11','2021-01-12','2020-01-03', '2021-02-01'],
        'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Mercedes'],
        'Price': [22000,25000,27000,35000,45000],
        'Mileage': [2000,'NAN',47000,3500,5000]
        }

df = pd.DataFrame(cars, columns = ['Date','Brand', 'Price', 'Mileage'])

print (df)

对第一个数据帧进行修改

import pandas as pd

cars2 = {'Date': ['2020-09-11','2020-10-11','2021-01-12','2020-01-03', '2021-02-01'],
        'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Mercedes'],
        'Price': [22000,5000,27000,35000,45000],
        'Mileage': [2000,100,47000,3500,600]
        }

df2 = pd.DataFrame(cars2, columns = ['Date','Brand', 'Price', 'Mileage'])

print (df2)

现在我确实想知道如何只选择从第一个数据帧修改的行。我的预期输出只是获取稍后修改的行。我已经尝试过了,但它也给了我旧行

df_diff = pd.concat([df,df2], sort=False).drop_duplicates(keep=False, inplace=False)

预期产出

import pandas as pd

cars3 = {'Date': ['2020-10-11', '2021-02-01'],
        'Brand': ['Toyota Corolla','Mercedes'],
        'Price': [5000,45000],
        'Mileage': [100,600]
        }

df3 = pd.DataFrame(cars3, columns = ['Date','Brand', 'Price', 'Mileage'])

print (df3)

标签: pythonpandasdataframe

解决方案


因为有相同的索引和列可以DataFrame.ne用于比较不相等并测试是否至少有一行TrueDataFrame.any过滤boolean indexing

df3 = df2[df.ne(df2).any(axis=1)]
print (df3)
         Date           Brand  Price  Mileage
1  2020-10-11  Toyota Corolla   5000      100
4  2021-02-01        Mercedes  45000      600

推荐阅读