python - 如何找到两个数据框行之间的差异?
问题描述
我有两个数据框,我在一个公共 ID 上合并在一起。我试图发现匹配 ID 的每一行中的值何时不同。
我合并了文件,以便获得下表。我想我可以用一系列 if 语句来解决这个问题,但实际的数据文件有数百个列属性,这似乎根本没有效率。我正在尝试确定是否有一种简单的方法可以做到这一点。
x Loan_ID Trade_Quantity_x Principal_x Interest_x Late_Fee_x Trade_Quantity_y Principal_y Interest_y Late_Fee_y
0 1 10 30 0 0 10 30 0 0
1 2 10 0 0 5 10 0 0 0
2 3 10 0 50 0 10 0 0 0
3 4 10 0 0 0 10 0 0 0
4 5 10 100 10 0 10 100 10 0
5 6 9 0 0 0 9 0 0 0
6 7 10 0 0 0 10 0 0 0
预期输出应该是:
2. Late_Fee_y
3. Interest_y
解决方案
我假设您所追求的是比较相同结构的两个数据帧,即具有相同的列列表和由 special 值标识的相同行数Loan_ID
。
目标是列出两个帧之间不同的所有“单元格”,单元格位置由 Loan_ID 中的 id 和列名组成。
我是否可以建议先以不同的方式合并两个帧,以获取值列表,然后通过扫描融化的帧或应用过滤器来查找差异?
示例数据(认为id
是Loan_ID
)
x = {'id':[1,2],'A':[0,1],'B':[2,3]}
y = {'id':[1,2],'A':[0,2],'B':[2,4]}
df_x = pd.DataFrame(x)
df_y = pd.DataFrame(y)
print(df_x)
print(df_y)
融化了
df_xm = pd.melt(df_x, id_vars=['id'])
df_xm['source']='x'
df_ym = pd.melt(df_y, id_vars=['id'])
df_ym['source']='y'
print(df_xm)
print(df_ym)
假设两帧都按id对应排序
for i in df_xm.index:
if df_xm['value'][i] != df_ym['value'][i]:
print(f"{df_xm['id'][i]},{df_xm['variable'][i]}")
第二种方法:
merged = df_xm.merge(df_ym, left_on= ['id','variable'], right_on=['id','variable'])
print(merged)
filter_diff = merged['value_x'] != merged['value_y']
print('differences:')
print(merged[ filter_diff ])
我确信这可以提高效率,但这是我的一般想法,如何使用通用框架/表和过滤器操作来解决“两个表快照之间的差异”。
推荐阅读
- amazon-web-services - AWS ELB 从 Fastly 健康检查中获得大量 404 错误
- java - 使用文件路径保存 HashMap
- powershell - 当我尝试通过 TFS Build 运行时,Powershell 脚本未安装 exe
- kubernetes - 通过 DNS ping 有状态集的 pod
- angular - 如何在新行中显示 Kendo-chart-title
- python - Django:按多个ID过滤查询集
- java - 单击停止按钮后 TimerTask 没有停止
- swift - 在计算属性中设置新值
- r - R识别数据框中的第一个值并通过从新列的数据框中的所有值中添加/减去该值来创建新变量
- python - 如何从 Django 中的项目级包导入而不与同名的应用级模块冲突?