熊猫-查找列的重复值

时间:2019-04-24 03:58:08

标签: python python-3.x pandas conditional data-analysis

我正在寻找两种不同的方法来查找df中列的重复值。

首先要确定基于不同列的条件的列中的值是否存在于不同的df中。如果在df_1中,在df_2中存在与“时间”列中相同时间的任何ID

例如

df_1

id |       time  
ab23 2019-04-17 01:00:00
bv63 2019-04-16 22:00:00

df_2

id |     time  
ab23 2019-04-17 01:00:00
bv63 2019-04-16 22:00:00

还可以检查同一df的同一列中是否存在相同的id,而不管是否有其他col。因此,要查看df_1中是否有任何ID在同一df中有重复项。

我试图查看ID在同一df中是否重复,并且还基于这样的条件,即它们在不同的df中具有相同的id和时间。

2 个答案:

答案 0 :(得分:1)

设置示例:

import pandas as pd

df1 = pd.DataFrame({
    'id':['a','a','c'],
    'time':[pd.Timestamp('2019-04-17 01:00:00'),
            pd.Timestamp('2019-04-18 22:00:00'),
            pd.Timestamp('2019-04-16 22:00:00')]
})

df2 = pd.DataFrame({
    'id':['e','f'],
    'time':[pd.Timestamp('2019-04-17 01:00:00'), pd.Timestamp('2019-04-02 22:00:00')]
})
  

检查相同df的同一列中是否存在相同的ID,而与其他任何col无关。

dupes = df1['id'].duplicated()
df1['id'][dupes]
  

如果在df_1中,在df_2中存在与“时间”列中具有相同时间的任何ID

matches = df1['time'].isin(df2['time'])
df1['id'][matches]

答案 1 :(得分:0)

如果要忽略索引数据。将数据帧的内容转换为包含列的元组集:

ds1 = set([tuple(line) for line in df1.values])
ds2 = set([tuple(line) for line in df2.values])

此步骤还将消除数据帧中的所有重复项(索引被忽略)

set([(1, 2), (3, 4), (2, 3)])   # ds1
然后

可以使用set方法查找任何内容。例如找出差异:

ds1.difference(ds2)
gives: set([(1, 2), (3, 4)])
如果需要,

可以将其带回数据框。注意必须将设置转换为列表1,因为设置不能用于构造数据帧:

pd.DataFrame(list(ds1.difference(ds2)))