Re: [問題] 條件扣減金額及消訂單

作者: Czero (悠閒)   2020-07-03 17:17:25
※ 引述《rounders (望仔)》之銘言:
: 大家好
: 我有一些訂單資料(data)有日期、人名、金額,
: 客戶會匯錢進來(remit),想把匯入的錢日期順序扣減訂單金額併入data第四欄
: 如果匯入餘額為0,就把符合金額訂單列出;如果金額無法剛好抵訂單就產出另一資料
: 再以人工處理。
: 目前只想到先抓人名產出各別DF的金額欄轉為LIST,再用迴圈扣除判斷餘數是否為0或負數
: 剛寫還是很卡
: 所以上來問問這樣做是可行的嗎?有什麼好方法或是方向呢,感謝大家了。
: 訂單和匯入款如下
: import pandas as pd
: data = pd.DataFrame(
: [['0601', 'Ming', 500],
: ['0602', 'Ming', 800],
: ['0601', 'Wang', 600],
: ['0602', 'Wang', 400],
: ['0603', 'Wang', 1500],
: ['0604', 'Wang', 5500],
: ['0601', 'Lin', 1500],
: ['0602', 'Lin', 2500],
: ['0603', 'Lin', 3500]],
: columns=['Date', 'Name', 'Trade'])
: remit = pd.DataFrame(
: [['Ming', 1300],
: ['Wang', 2500],
: ['Lin', 1800]],
: columns=['Name', 'remit'])
# 先做一次排序
data2 = data.groupby('Name').apply(lambda
x:x.sort_values('Date')).join(remit.set_index('Name')).reset_index(drop=True)
# cum1用來判斷訂單總資金
data2['cum1'] = data2.groupby('Name').apply(lambda x:
x.Trade.cumsum()).reset_index(drop=True)
data2['cum2'] = data2.groupby('Name').apply(lambda x:
x.Trade.cumsum().shift(1).fillna(0)).reset_index(drop=True)
# 判斷當日可用匯款資金
data2['cum3'] = data2.remit-data2.cum2
#列出訂單金額等於匯入款的用戶
data2.groupby('Name').apply(lambda x:x.iloc[len(x)-1].cum1 <=
x.iloc[len(x)-1].remit)
#列出可繳納訂單日期
data2[data2.cum3 >= data2.Trade]

Links booklink

Contact Us: admin [ a t ] ucptt.com