用python整理含有业务名称和票号两列数据的Excel表,其中业务名称为字符串,票号为一个八位整数,要求如下: 1.如果一个业务只对应一个票号,则无需修改 2.如果一个业务对应有多个票号,则将这些票号合并在一起,按从小到大的顺序排列,并默认用逗号分隔,但如果两个票号相连则用连字符分隔。 举例: 如果原数据为:业务1 19283987;业务1 19837283;业务1 19283988;业务2 19283749 则最后输出为:业务1 19283987-19283988,19837283;业务2 19283749
时间: 2024-02-24 10:59:45 浏览: 109
可以使用pandas库来对Excel表进行整理。
代码如下:
```python
import pandas as pd
# 读取Excel表数据
df = pd.read_excel('data.xlsx')
# 按业务名称和票号排序
df = df.sort_values(by=['业务名称', '票号'])
# 定义函数,用于合并票号
def merge_tickets(group):
if len(group) == 1:
return group['票号'].astype(str).values[0]
else:
tickets = group['票号'].sort_values().astype(str).tolist()
merged_tickets = []
start_ticket = tickets[0]
for i in range(1, len(tickets)):
if int(tickets[i]) == int(tickets[i-1]) + 1:
continue
else:
if start_ticket == tickets[i-1]:
merged_tickets.append(start_ticket)
else:
merged_tickets.append(start_ticket + '-' + tickets[i-1])
start_ticket = tickets[i]
if start_ticket == tickets[-1]:
merged_tickets.append(start_ticket)
else:
merged_tickets.append(start_ticket + '-' + tickets[-1])
return ','.join(merged_tickets)
# 根据业务名称分组,对票号进行合并
result = df.groupby('业务名称').apply(merge_tickets).reset_index()
result.columns = ['业务名称', '票号']
# 输出结果
print(result)
```
其中,我们先读取Excel表中的数据,并按照业务名称和票号排序。然后定义了一个函数`merge_tickets`,用于对每个业务名称对应的票号进行合并。如果该业务只对应一个票号,则直接返回该票号;否则将票号按照从小到大的顺序排序,并根据连续性用逗号或连字符进行分隔。最后,我们根据业务名称进行分组,并将票号进行合并,最终得到整理后的结果。
阅读全文