Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何突出显示数据帧的两个不同列中的唯一数据值?_Python_Pandas_List_Numpy_Dataframe - Fatal编程技术网

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

Python 如何突出显示数据帧的两个不同列中的唯一数据值?,python,pandas,list,numpy,dataframe,Python,Pandas,List,Numpy,Dataframe,我想突出显示dataframe的两个不同列中重复的数据值。 例如: 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。为此,我创建了另一个

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

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:

我试图检查为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


如果带有
节点的所有对
均未重复,则使用
np.排序
(如果性能很重要)和:


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

df.apply(frozenset, axis=1).duplicated()
输出:

0    False
1    False
2    False
3     True
4     True
dtype: bool
列表理解:

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.其中

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

df1
中是否可能有另一行
ab
?如果是,预期输出是什么?对于“更大”的数据集,这是唯一可扩展且高效的解决方案。@arush05只是一个提醒:如果答案解决了您的问题,请记住单击勾号“接受”它。这将从“未解决问题”列表中删除它(这样人们就不会浪费时间试图再次修复它),告诉搜索同一问题的任何人解决方案是什么(这样他们就不会在解决方案出现时浪费时间搜索),并鼓励人们在将来回答您的其他问题。尽管应用frozenset有效,我在更大的数据集上使用过几次,速度非常慢。你应该自己测试一下。@Erfan当然了。这不是一个并行计算。如果您的数据集很小,并且不想编写太多代码,那么这是一个很好的解决方案。
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
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