如何找到两个数据框行之间的差异?

时间:2019-10-27 22:20:41

标签: python pandas

我有两个数据框,它们在一个通用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

1 个答案:

答案 0 :(得分:0)

我假设您要做的是比较两个具有相同结构的数据帧,即具有相同的列列表和相同的行数,这些列由特殊let a = [[true, false, false], [false, true, true]]; var reverseInvert = a => { const newA = a.map(arr => arr.reverse().map(bool => !bool)); return newA; }; console.log(reverseInvert(a));的值标识。

目标是列出两个框架之间不同的所有“单元格”,单元格位置由Loan_ID和列名中的ID决定。

我是否可以建议先以不同的方式合并两个框架,以获取值列表,然后通过扫描融化的框架或应用过滤器来找到差异?

示例数据(将let a = [[true, false, false], [false, true, true]]; var reverseInvert = a => { a.forEach((arr, i, outerArr) => { outerArr[i] = arr.reverse().map(bool => !bool) }); return a; }; console.log(reverseInvert(a));视为Loan_ID

id

融化

Loan_ID

假设两个帧都按照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)

我确信可以提高效率,但这是我的一般想法,即如何使用常规框架/表和过滤器操作来解决“两个表快照之间的差异”。