python - 从更新的数据框中识别修改的行
问题描述
我收集数据并分析。在这种情况下,有时像昨天或上周那样收集的数据缺少一个值,并且可能会在以后有可用记录时更新,或者行值可能会更改。我的意思是可能会修改行值,请参阅示例数据框:
接收的第一个数据帧
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)
解决方案
因为有相同的索引和列可以DataFrame.ne
用于比较不相等并测试是否至少有一行True
并DataFrame.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
推荐阅读
- javascript - 如何定位:固定 div 与其位置相关:相对父级?
- javascript - 美丽的汤和硒没有抓住内容
- kotlin - 带有聊天机器人的片段论坛崩溃而没有任何错误android studio kotlin
- kubernetes - 一个 Kubernetes 集群可以处理多少个 CR(自定义资源)?
- sql-server - 最大长度为 128。“+”附近的语法不正确
- html - 如何保护我的 html 网站不被 http web 复制器复制?
- php - 我如何在不同的端口服务 laravel 7
- python - 在 Pandas 中,如何将日期索引移动到下一个日历日期
- javascript - 如何引用由 EKS 的容器洞察创建的 CloudWatch 指标?
- java - 如何在 KeyCloak 中分配复合角色