我试图比较两个 Dataframe ,以检查它们之间有什么变化。这是版本控制脚本的一部分,所以我做了一个简化版本,试图找到一个解决方案:
data = {'ID': ['1', '2', '3', '4'],
'Date': ['23-01-2023', '01-12-1995', '03-07-2013', '05-09-2013'],
'Time': ['01:45:08', '02:15:21', '23:57:14', '03:57:15'],
'Path': ['//server/test/File1.txt', '//server/test/File2.txt', '//server/test/File3.txt', '//server/test/File4.txt'],
}
data2 = {'ID': ['1', '2', '3'],
'Date': ['23-01-2023', '03-07-2013', '01-12-1995', '05-09-2013'],
'Time': ['01:45:08', '23:57:14', '02:17:21', '03:18:31'],
'Path': ['//server/test/File1.txt', '//server/test/File3.txt', '//server/test/File2.txt', '//server/test/File5.txt'],
}
df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
因此,我创建了2个 Dataframe ,如下所示:
数据框1
| ID | Date | Time | Path |
| 1 | 23-01-2023 | 01:45:08 | //server/test/File1.txt |
| 2 | 01-12-1995 | 02:15:21 | //server/test/File2.txt |
| 3 | 03-07-2013 | 23:57:14 | //server/test/File3.txt |
| 4 | 05-09-2013 | 03:57:15 | //server/test/File4.txt |
数据框2
| ID | Date | Time | Path |
| 1 | 23-01-2023 | 01:45:08 | //server/test/File1.txt |
| 2 | 03-07-2013 | 23:57:14 | //server/test/File3.txt |
| 3 | 01-12-1995 | 02:17:21 | //server/test/File2.txt |
| 4 | 21-11-1991 | 03:18:31 | //server/test/File5.txt |
以我知道的第一个为参考:
- ID为4的文件已被删除
1.文件2已修改
1.已添加新文件(表dataframe 2中的ID 4)
最后,我希望得到以下输出:
| ID | Date | Time | Path | Status |
| 1 | 23-01-2023 | 01:45:08 | //server/test/File1.txt | - |
| 2 | 01-12-1995 | 02:15:21 | //server/test/File2.txt | UPDATED |
| 3 | 03-07-2013 | 23:57:14 | //server/test/File3.txt | - |
| 4 | 05-09-2013 | 03:57:15 | //server/test/File4.txt | DELETED |
| 5 | 21-11-1991 | 03:18:31 | //server/test/File5.txt | ADDED |
可以只使用Pandas的JOIN来完成吗?
2条答案
按热度按时间nzkunb0c1#
如果您打算比较路径,请将其移动到索引中并使用
concat
:juzqafwq2#
解决方案包括:
Path
键上的merging Dataframe ,具有关键indicator
参数,以获得指示哪一侧(或两侧)成功合并的标记Status
字段Map到预定义Map{'left_only': 'DELETED', 'right_only': 'ADDED'}
Date/Time
查找UPDATED
记录