python - 比较从两个excel文件Dataframe创建的两个,基于该创建/更新新列
问题描述
我有两个excel文件,A和B。A是主副本,其中员工姓名和组织名称(Name
和Org
)的更新记录可用。文件 B 包含具有较旧记录Name
的Org
列以及我们不感兴趣的许多其他列。
Name Org
0 abc ddc systems
1 sdc ddc systems
2 csc ddd systems
3 rdc kbf org
4 rfc kbf org
我要执行以下操作。!
1)对于文件 B 中的所有现有条目(列Name
和Org
),我想将文件 B 与文件 A 进行比较,在文件 B 中创建另外两列(' Newemployee
' 和 ' Org_change
')。
- 如果我们在“ ”下的文件 B 中发现缺少名称条目,则使用“ ”更新“
Newemployee
”列。Y
Name
- 如果我们注意到“ ”
Org_change
下的组织发生变化,则使用“新组织名称(根据与工作表 A 的比较)”更新“ ”列Org
到目前为止,我已经连接了两个 Dataframe 以获得新的员工姓名,但没有进一步了解如何继续,
full_set = pd.concat([B, A]).drop_duplicates(subset=['Name'])
任何帮助将不胜感激。谢谢。
解决方案
在删除重复项时,您可以选择不保留任何一个副本,这基本上意味着您只保留唯一值。如果其中一个 DataFrame 是另一个的严格子集,这将为您提供更新。
diff_set = pd.concat([old, new]).drop_duplicates(subset=['Name'], keep=False)
看来您的索引不匹配。如果遇到此问题,可能需要先设置索引。
diff_set = pd.concat([old.set_index("Org"), new.set_index("Org")]).drop_duplicates(subset=['Name'], keep=False).reset_index(drop=False)
最后一个reset_index
只是恢复到索引只是一个枚举计数器的格式。
编辑:
ll
Out[101]:
Name Org
0 abc ddc systems
1 sdc ddc systems
2 csc ddd systems
3 rdc kbf org
4 rfc kbf org
ll2
Out[102]:
Name Org
0 abc ddc systems
1 sdc ddc systems
2 csc ddd systems
3 rdc kbf org
4 rfc kbf org
5 Spam ddc systems
6 John ddc systems
7 Foo ddd systems
diff_set = pd.concat([ll.set_index("Org"), ll2.set_index("Org")]).drop_duplicates(subset=['Name'], keep=False).reset_index(drop=False)
diff_set
Out[104]:
Org Name
0 ddc systems Spam
1 ddc systems John
2 ddd systems Foo
我可以添加任意数量的员工,它会继续工作。^^
推荐阅读
- typescript - ESLint 配置中的“parser”和“parserOptions.parser”有什么区别?
- angular - 使用 Angular 中的主题通过服务向组件发送数据
- java - 如何将java文件转换为在Android上运行的apk
- go - 无法在 WSL 上安装 go 工具
- java - 使用 Jackson 转换日期/时间时保留时区信息
- microsoft-graph-api - 从 Microsoft Graph 客户端获取响应标头
- css - 如何使图像溢出容器宽度而不是 100% 高度上的翘曲
- java - 为什么我自己的异常不需要参数?
- git - 行更改的 Git 交叉兼容性问题
- d3.js - 无法让 D3 .on('mouseover', ...) 工作