如何突出显示数据框的两个不同列中的唯一数据值?

Posted

技术标签:

【中文标题】如何突出显示数据框的两个不同列中的唯一数据值?【英文标题】:How to highlight unique data value in two different columns of a dataframe? 【发布时间】:2020-05-18 23:09:47 【问题描述】:

我想突出显示数据框的两个不同列中的重复数据值。 例如:

df1:

item Node

A      B

A      C

A      D

B      A

C      A

我希望输出如下:

item Node Same

A      B  False

A      C  False

A      D  False

B      A  True

C      A  True

我想显示重复的值,例如是否有 A-B 我想突出显示 B-A。为此,我创建了另一个数据框并交换了两列的值。

df2:

item   node

B      A

C      A

D      A

A      B

A      C

我正在尝试检查 df1['item']==df2['node'] 和 df1['node']==df2['item'] ,如果为真,则重复该值。当 A 进入 df1 项目时,它会检查 df2 节点中的 A 并相应地检查 A 的相应节点 B 是否进入 df2 的项目列。

import pandas as pd
import numpy as np
data=pd.read_excel(r'C:\Users\eumukar\Desktop\test data xl.xlsx')
df1=pd.DataFrame(data,columns=['item','node'])
df2=pd.DataFrame(data,columns=['node','item'])
df1['Same']=np.where((df1['item']==df2['node']) & (df1['node']==df2['item']),'True','False')
print(df1)

我得到的输出是:

item node   Same
 A    B  False
 A    C  False
 A    D  False
 B    A  False
 C    A  False

【问题讨论】:

df1 中是否可能有另一行 A B?如果是,预期的输出是什么? 【参考方案1】:

您可以将每一行转换为frozenset,并使用方法duplicated

df.apply(frozenset, axis=1).duplicated()

输出:

0    False
1    False
2    False
3     True
4     True
dtype: bool

【讨论】:

虽然 apply freezeset 有效,但我在更大的数据集上使用了几次,而且速度非常慢。你应该自己测试一下。 @Erfan 当然。这不是并行计算。如果您的数据集很小并且不想编写太多代码,这是一个很好的解决方案。【参考方案2】:

列表理解:

df["same"] = [True if len(df.loc[df["Node"].eq(i)])>1 else False for i in df["Node"]]
print (df)

  item Node   same
0    A    B  False
1    A    C  False
2    A    D  False
3    B    A   True
4    C    A   True

np.where:

s = set(df.loc[df["Node"].duplicated(),"Node"])
df["same"] = np.where(df["Node"].isin(s), True, False)
print (df)

  item Node   same
0    A    B  False
1    A    C  False
2    A    D  False
3    B    A   True
4    C    A   True

【讨论】:

【参考方案3】:

如果itemNode 的所有对不重复,则使用np.sort(如果性能很重要)和DataFrame.duplicated

df1['Same'] = pd.DataFrame(np.sort(df1[['item','Node']], axis=1), index=df.index).duplicated()
print (df1)
  item Node   Same
0    A    B  False
1    A    C  False
2    A    D  False
3    B    A   True
4    C    A   True

【讨论】:

对于“更大”的数据集,这是唯一可扩展且高效的解决方案。 @arush05 提醒一下:如果某个答案解决了您的问题,记得点击勾选标记以“接受”它。这会将它从“未解决的问题”列表中删除(这样人们就不会浪费时间试图再次修复它),告诉任何搜索相同问题的人解决方案是什么(所以他们不要'当解决方案就在这里时,不要浪费时间搜索),并且它将鼓励人们在未来回答您的其他问题。

以上是关于如何突出显示数据框的两个不同列中的唯一数据值?的主要内容,如果未能解决你的问题,请参考以下文章

突出显示 A:B 列中的值相同但 C 列中的值不同的行

VBA突出显示列中的重复项

基于两个不同列值突出显示/着色整行的条件格式公式

如果另一列中的相应行包含特定值,我想使用条件格式突出显示一列中的单元格

如果谷歌电子表格的同一列中的值重复,如何突出显示单元格?

在 OpenOffice Calc 中突出显示列中的重复值