pandas - 如何检查单元格数据是否存在于两个不同的数据框行中
问题描述
我有两个文件。他们已经按第一列排序。我需要一些如何检查第一个文件中的行数据是否等于(或存在)到第二个文件中的同一行。如果数据不存在(意味着新值或已更改)我想用“”更新这两个文件。
例子
老的
col1 col2 col3 col4
val1 val2 val3 val4
val5 val6 val7 val8
新的
col1 col2 col3 col4
val1 val2 val3 val4
val9 val5 val6 val7
结果
old_updated
col1 col2 col3 col4 col5
val1 val2 val3 val4 nan
val5 val6 val7 val8
新更新
col1 col2 col3 col4 col5
val1 val2 val3 val4
val9 val5 val6 val7
我已经为系列尝试过 isin
解决方案
这是一个使用 pandas 合并的开始,将指标标志设置为 True。这将添加一列,告诉您该行的来源是什么。
dfnew = pd.DataFrame([["x","y","z","t"], ["a","s","b","e"]],
columns=("col1","col2","col3","col4"))
dfold = pd.DataFrame([["x","y","z","t"],["d","a","b","t"]],
columns=("col1","col2","col3","col4"))
df_merge = pd.merge(dfnew, dfold, how="outer", indicator=True)
>>>
col1 col2 col3 col4 _merge
0 x y z t both
1 a s b e left_only
2 d a b t right_only
使用外部连接,您将看到所有内容。how="left"
如果您只想要dfnew
表示的行,您可以这样做。
从这里你可以在_merge
你认为合适的时候屏蔽列等。您的用例尚不清楚,因此这应该可以帮助您。
推荐阅读
- kubernetes - 如何从 microk8s 部署访问我网络中的机器
- reactjs - 必须使用 forwardRef Typescript 定义两次应用接口
- laravel - Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column
- r - 根据行数向列添加值
- java - 在 Spring Boot 和 Angular 中使用 websockets 向客户端发送触发器
- excel - 将数据复制到新工作表并重新组织它的最佳方法(VBA)
- react-native - 如何在android中添加角色react-native sdk
- javascript - 如何在没有任何 html 的情况下使用 vanilla javascript 和 css 制作切换按钮
- angular - 在 Angular 的开放层中映射单个位置地址
- android - Firebase 和 workmanager 已导出广播接收器 - 它们仍然安全吗?