python - 如何获取 Pandas df.merge() 不匹配的列名

标签 python pandas data-wrangling

鉴于以下数据:

data_df = pd.DataFrame({
    "Reference": ("A", "A", "A", "B", "C", "C", "D", "E"),
    "Value1": ("U", "U", "U--","V", "W", "W--", "X", "Y"),
    "Value2": ("u", "u--", "u","v", "w", "w", "x", "y")
    }, index=[1, 2, 3, 4, 5, 6, 7, 8])
truth_df = pd.DataFrame({
    "Reference": ("A", "B", "C", "D", "E"),
    "Value1": ("U", "V", "W", "X", "Y"),
    "Value2": ("u", "v", "w", "x", "y")
    }, index=[1, 4, 5, 7, 8])
data_df



引用
值1
值2


1
一种



2
一种

你——

3
一种
你——


4


v

5
C



6
C
W--


7
D
X
X

8





真相_df



引用
值1
值2


1
一种



4


v

5
C



7
D
X
X

8





下面的代码将两者合并并标记值不匹配的行 truth_df
df_out = data_df.merge(truth_df, on=['Reference', 'Value1','Value2'], how='left', indicator=True).rename(columns={"_merge":"Issues"})
df_out["Issues"] = np.where(df_out["Issues"] == "left_only", "Flag", "")
df_out
产生以下数据框
df_out



引用
值1
值2
问题


0
一种



1
一种

你——
旗帜

2
一种
你——

旗帜

3


v

4
C



5
C
W--

旗帜

6
D
X
X

7






我想知道是否有办法确定哪些列发生冲突,而不是显示 Flag我将显示列名,如 Value1Value2分别。
所需的 df



引用
值1
值2
问题


0
一种



1
一种

你——
值2

2
一种
你——

值1

3


v

4
C



5
C
W--

值1

6
D
X
X

7






请注意 即使 Reference列看起来很有用,但在我的真实数据中它不是可靠的来源,因此任何解决方案都不得使用该列。

最佳答案

您可以使用 df.set_index 将两个数据帧的索引设置为索引然后使用 df.ne 检查相等性然后使用 df.dot 与列。

data_df = data_df.set_index('Reference') # Ignore if Reference is index already
truth_df = truth_df.set_index('Reference') # Ignore if Reference is index already
data_df['issue'] = data_df.ne(truth_df, axis=1).dot(data_df.columns)
print(data_df.reset_index())

  Reference Value1 Value2   issue
0         A      U      u        
1         A      U    u--  Value2
2         A    U--      u  Value1
3         B      V      v        
4         C      W      w        
5         C    W--      w  Value1
6         D      X      x        
7         E      Y      y        

关于python - 如何获取 Pandas df.merge() 不匹配的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67457473/

相关文章:

python - 保存子模型时,在 Django 抽象父模型上启动后保存

python - 多次分割字符串并将结果作为新的 DataFrame 返回

python - NaN 在 scikit-learn 的 OneHotEncoder 中给出 ValueError

R 在数据框中组合行和列

r - 如何在 R 中处理 "wrap"行?

python - 池多处理失败

python - 如何使用 Scikit-Image 库从 Python 中的 RGB 图像中提取绿色 channel ?

python - Tensorflow Saver.save无法写入Docker共享卷

Python - 删除不在列表中的所有子字符串

python - 正则表达式::'pandas._libs.interval.Interval' 对象没有属性 'replace'