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