python - 比较 Pandas Dataframe 的匹配行和列的差异
问题描述
我想知道哪个是比较两个数据帧的每个单元格的最佳方法,仅适用于与第一个数据帧行和列匹配的单元格,例如:
df1 =
df2 =
我想要的输出是获取具有相同项目名称的 df2 行和 df2 中存在的 df1 列的两个数据帧之间的每个单元格更改,在这种情况下:
欢迎任何关于如何为更大的数据帧而不是两个循环执行此操作的想法。
解决方案
你可以使用pd.melt来做你想做的事。
就像在这个例子中:
import pandas as pd
df_before = pd.DataFrame({'item':['A','B','C', 'D'], 'value':[1,2,3,4]})
df_after = pd.DataFrame({'item':['A','B','C', 'D'], 'value':[1,1,3,5]})
melt_before = df_before.melt(id_vars=['item'], value_vars=['value'], var_name='column')
melt_after = df_after.melt(id_vars=['item'], value_vars=['value'], var_name='column')
diff = melt_before.merge(melt_after, on=['item', 'column'], suffixes=('_old', '_new'))
print(diff[diff['value_old'] != diff['value_new']])
它打印以下 Dataframe :
|--|----|------|---------|---------|
| |item|column|value_old|value_new|
|--|----|------|---------|---------|
|1 | B |value |2 |1 |
|3 | D |value |4 |5 |
|--|----|------|---------|---------|
推荐阅读
- sql - 如何在 hsqldb 中获取当前用户,就像我们在 oracle 中使用 sys_context
- javascript - 堆叠的 svg 中的外来对象或对象标签未在 Safari 中注册点击
- r - 不同组的直方图着色
- r - 使用 data.table 按组顺序更新行
- python-3.x - Python API 身份验证
- python - 将元组列表和列表转换为字典
- charts - 均衡器,如 highcharts 中的直方图
- flutter - 在 Flutter 中获取 TextFormField 的选择
- google-bigquery - 如何将多条记录插入 BigQuery 中特定行的重复记录字段?
- node.js - 花费超过 3 分钟更新 Firestore 文档