※ 引述《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]