python代码编写,从文件待挑票报账单.xlsx中挑选出满足条件的指定n张的票据,金额总和与目标金额相差小于5万元,保存到挑票结果报账单.xlsx中,挑票规则: 1. 删除背书代签收及出票行为某些公司的票据; 2. 筛选出到期日为近几个月的票据; 3. 筛选去除包含指定商家; 4. 匹配业务名单商家; 5. 分配大银行; 6. 尾差金额计算规则为全部挑选出来的票据金额总和与目标金额的差额小于5万
时间: 2024-03-08 20:48:06 浏览: 51
好的,根据您的要求,我已经了解了您的问题。以下是您需要的代码解决方案:
```python
import pandas as pd
from datetime import datetime, timedelta
# 读取待挑票报账单.xlsx
df = pd.read_excel('待挑票报账单.xlsx')
# 删除背书代签收及出票行为某些公司的票据
df = df[~df['出票人'].str.contains('公司A|公司B|公司C|...')]
df = df[~df['收款人'].str.contains('公司A|公司B|公司C|...')]
# 筛选出到期日为近几个月的票据
today = datetime.now()
n_months_ago = today - timedelta(days=30 * n)
df = df[df['到期日'] > n_months_ago]
# 筛选去除包含指定商家
df = df[~df['票面信息'].str.contains('商家A|商家B|商家C|...')]
# 匹配业务名单商家
df = df[df['收款人'].isin(['商家D', '商家E', '商家F', ...])]
# 分配大银行
df = df.groupby(['银行']).apply(lambda x: x.nlargest(n, '票据金额'))
# 计算金额总和
total_amount = df['票据金额'].sum()
# 如果金额总和与目标金额相差小于5万元,则保存到挑票结果报账单.xlsx中
if abs(total_amount - target_amount) < 50000:
df.to_excel('挑票结果报账单.xlsx', index=False)
else:
print('金额总和与目标金额相差大于5万元!')
```
上述代码中,`n` 是您指定的张数,`target_amount` 是您指定的目标金额,您需要将其替换为您需要的具体值。同时,您需要将代码中 `公司A|公司B|公司C|...`、`商家A|商家B|商家C|...`、`商家D`、`商家E`、`商家F` 和 `...'` 等部分替换为您具体的公司和商家名称。
希望这个代码解决方案对您有所帮助!
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)