在多个标准上查找重复项

2024-06-02 12:04:53 发布

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

我有一套金融交易,日期日期金额描述来源,我想找到金额相同,日期在一天之内,但来源不同的交易。源应该不同,因为事务是从许多源导入的,并且每个源都有唯一的条目。你知道吗

例如,我想找出第1行和第3行是重复的:

'date','amount','description','source'
1/5/2018, 5.28, 'McDonalds', 'BankOfAmerica'
1/6/2018, 8.44, 'Starbucks', 'BankOfAmerica'
1/5/2018, 5.28, 'McDonalds Rest', 'BoA'
2/10/2018, 22.72, 'Chipolte', 'Chase'
3/10/2018, 4.58, 'Wendys', 'BoA'

我在Python中尝试过,我可以通过以下方法找到副本:

df_no_dups = df.drop_duplicates(subset=['amount','dates'])
df_dups = df[~df.isin(df_no_dups)].dropna()

但这是一个精确的日期匹配,然后我必须运行另一个脚本,以确保来源是不同的。你知道吗

我也试着通过groupby数量,然后在其中迭代,以找到日期相近、来源不同的地方,但我无法找出组的详细信息。你知道吗

其他方法可以是使用SQL或在电子表格(google)中处理事务。你知道吗


Tags: 方法nodf来源条目交易事务金额
2条回答

使用已存在

select t1.* from table_name t1
where exists( select 1 from table_name t2 
             where t2.date=t1.date and t2.amount=t1.amount and t1.source<>t2.source)

考虑以下数据(为了更好地理解,在第3行中添加了一行)

data = pd.compat.StringIO("""5 Jan, 5.28, 'McDonalds', 'BankOfAmerica'
6 Jan, 8.44, 'Starbucks', 'BankOfAmerica'
5 Jan, 5.28, 'McDonalds Rest', 'BoA'
5 Jan, 5.28, 'McDonalds Rest', 'BankOfAmerica'
10 Feb, 22.72, 'Chipolte', 'Chase'""")
df = pd.read_csv(data,header=None)
df.columns=['Date','Amount','Dscription','Source']
print(df)

 Date  Amount         Dscription            Source
0   5 Jan    5.28        'McDonalds'   'BankOfAmerica'
1   6 Jan    8.44        'Starbucks'   'BankOfAmerica'
2   5 Jan    5.28   'McDonalds Rest'             'BoA'
3   5 Jan    5.28   'McDonalds Rest'   'BankOfAmerica'
4  10 Feb   22.72         'Chipolte'           'Chase'

对于副本和不同来源:

df_dups =df[df.duplicated(['Date','Amount'],keep=False)]
df_dups =df_dups.drop_duplicates(['Date','Amount','Source'],keep=False)
print(df_dups)


    Date  Amount         Dscription            Source
0  5 Jan    5.28        'McDonalds'   'BankOfAmerica'
2  5 Jan    5.28   'McDonalds Rest'             'BoA'

对于无DUP(拉取所有其他行基本上是df-df_dup):

no_dups=df.loc[~df.index.isin(df_dups.index)]
print(no_dups)

     Date    Amount      Dscription            Source
1   6 Jan    8.44        'Starbucks'   'BankOfAmerica'
3   5 Jan    5.28   'McDonalds Rest'   'BankOfAmerica'
4  10 Feb   22.72         'Chipolte'           'Chase'

相关问题 更多 >