如何突出显示数据框的两个不同列中的唯一数据值?
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】:如果item
和Node
的所有对不重复,则使用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 提醒一下:如果某个答案解决了您的问题,请记得点击勾选标记以“接受”它。这会将它从“未解决的问题”列表中删除(这样人们就不会浪费时间试图再次修复它),告诉任何搜索相同问题的人解决方案是什么(所以他们不要'当解决方案就在这里时,不要浪费时间搜索),并且它将鼓励人们在未来回答您的其他问题。以上是关于如何突出显示数据框的两个不同列中的唯一数据值?的主要内容,如果未能解决你的问题,请参考以下文章