我有一组具有日期,金额,说明和来源的金融交易,我想要要查找金额相同,日期在一天之内但来源不同的交易。来源应有所不同,因为交易是从许多来源导入的,并且每个来源都有唯一的条目。
例如,我要查找第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)。
答案 0 :(得分:2)
考虑以下数据(为了更好地理解,在第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'
没有傻瓜(基本上拉所有其他行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'
答案 1 :(得分:1)
使用存在
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)