我正在寻找两种不同的方法来查找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和时间。
答案 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)))