Pandas数据帧唯一值

2024-09-29 01:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

从pandas dataframe获取唯一值需要一些帮助吗

我有:

    >>> df1
     source    target metric
0  acc1.yyy  acx1.xxx  10000
1  acx1.xxx  acc1.yyy  10000

基于目标+源的目标+源是唯一的。但是我不能用复制品得到这个。在

^{pr2}$

[更新]

也许复制不是正确的词,所以让我进一步解释

id  source  target
0   bng1.xxx.00 bdr2.xxx.00
1   bng1.xxx.00 bdr1.xxx.00
2   bdr3.yyy.00 bdr3.xxx.00
3   bdr3.xxx.00 bdr3.yyy.00
4   bdr2.xxx.00 bng1.xxx.00
5   bdr1.xxx.00 bng1.xxx.00

在上面,我想删除exampl source=target和target=source的条目。在

0 and 4 = same pair
1 and 5 = same pair
2 and 3 = same pair

end goal will be to keep 0 1 2 or 4 5 3 .

Tags: andsourcetarget目标pandasxxxsameyyy
2条回答

你对复制品的定义和熊猫用的不一样。在pandas中,如果对应的条目相同,则两行被认为是重复的。在下面的示例中,第1行和第2行不重复,因为它们对应的变量的值不同,而第3行和第4行是重复的。在

df = {'source':['acc1.yyy', 'acx1.xxx', 'acc1.xxx', 'acc1.xxx'], 'target': ['acx1.xxx', 'acc1.yyy', 'acc1.yyy', 'acc1.yyy']}
df = pd.DataFrame(df)
df
     # source    target
# 0  acc1.yyy  acx1.xxx
# 1  acx1.xxx  acc1.yyy
# 2  acc1.xxx  acc1.yyy
# 3  acc1.xxx  acc1.yyy
df.drop_duplicates()
     # source    target
# 0  acc1.yyy  acx1.xxx
# 1  acx1.xxx  acc1.yyy
# 2  acc1.xxx  acc1.yyy

对于您所提到的情况,创建一个新列,它是源列和目标列的元组。试试下面的方法

^{pr2}$

您需要先对两列进行排序:

df1[['source','target']] = df1[['source','target']].apply(sorted,axis=1)
print (df1)
     source    target  metric
0  acc1.yyy  acx1.xxx   10000
1  acc1.yyy  acx1.xxx   10000

df2 = df1.drop_duplicates(subset=['source','target'])
print (df2)
     source    target  metric
0  acc1.yyy  acx1.xxx   10000

编辑:

source似乎需要更改-删除最后3个字符:

^{pr2}$

相关问题 更多 >