离开几年后,我又回到了Python,我正在用Python重写一个旧的msAccess预算程序,特别是使用 Dataframe 。
有一个名为“A”的表(可能非常大),其中包含支出历史记录。表B是一个包含必须添加到表A的最近支出快照的表。但是,请注意,表B可能包含A中已有的重复项。我需要做的是查找表B中不在A中的条目,然后将它们附加到A。
在Access程序中,使用了以下msaccess SQL查询:
SELECT A.Date, A.Item, A.Debit, A.Credit, A.Balance, A.Description
FROM A LEFT JOIN B
ON(A.Date=B.Date) AND(A.Item=B.Item) AND(A.Balance=B.Balance)
WHERE(((B.Date) Is Null)) Or(((B.Item) Is Null)) Or(((B.Balance) Is Null))
然后将结果加到A中,一次加一个。
我怎么能用 Dataframe 来代替呢?我试过不同的合并技术,都没有成功。
以下是2个示例 Dataframe (数据已修改,不真实)
dfA = pd.DataFrame({
'Date': ['2023-01-25', '2023-01-24', '2023-01-24', '2023-01-23'],
'Item': ['Visa Purchase 21Jan Hanaro Northlakes Mango Hil ',
'Visa Purchase 21Jan Event Cinemas North North Lak',
'Visa Purchase 21Jan Event Cinemas North North Lak',
'Mcare Benefits 4880000027 Eywq'],
'Debit': [67.0, 10.2, 7.65, 39.75],
'Credit': [0.0, 0, 0, 0],
'Balance': [1830.0, 1897.99, 1908.019, 1915.84],
'Description': ['a', 'b', 'c', 'd']
})
dfB = pd.DataFrame({
'Date': ['2023-01-23', '2023-01-23', '2023-01-23', '2023-01-23'],
'Item': ['Csc R555558Df Nett',
'Tfr Wdl BPAY Internet 25Jan05:31 208655638973732700058Deft Payments',
'Eftpos Debit 25Jan15:19 Sq *Becs Cafe Kippa-Ring Qldau',
'Mcare Benefits 4880000027 Eywq'],
'Debit': [0, 168.0, 9.0, 39.75],
'Credit': [907.92, 0, 0, 0],
'Balance': [2053.09, 1885.07, 1876.09, 1915.84],
'Description': ['z', 'x', 's', 'f']})
print(f"A\n {dfA.head()}")
print(f"\nB\n {dfB.head()}")
(The这里的日期数据是一个字符串,但在我的程序中,它们都是日期类型)
任何帮助都将不胜感激
1条答案
按热度按时间gzszwxb41#
IIUC,你只需要从dfB添加新的行到dfA,这些行不是重复的。我认为这很简单。在你的例子中,这从dfB中删除了1行,所以newdf现在是7行。