用python整理含有业务名称和票号两列数据的Excel表,其中业务名称为字符串,票号为一个八位整数,要求如下: 1.如果一个业务只对应一个票号,则无需修改 2.如果一个业务对应有多个票号,则将这些票号合并在一起,按从小到大的顺序排列,并默认用逗号分隔,但如果两个票号相连则用连字符分隔。 3.更新整理后的Excel表 举例: 如果原数据为:业务1 19283987;业务1 19837283;业务1 19283988;业务2 19283749 则最后输出为:业务1 19283987-19283988,19837283;业务2 19283749
时间: 2024-02-24 13:00:07 浏览: 22
以下是用Python实现整理含有业务名称和票号两列数据的Excel表的代码:
```python
import pandas as pd
# 读取Excel表格
df = pd.read_excel('data.xlsx')
# 将票号转换为整数类型
df['票号'] = df['票号'].astype(int)
# 按业务名称和票号排序
df = df.sort_values(['业务名称', '票号'])
# 统计每个业务名称对应的票号数量
counts = df['业务名称'].value_counts()
# 遍历每个业务名称
for name in counts.index:
# 获取当前业务名称对应的所有票号
tickets = df.loc[df['业务名称'] == name, '票号']
# 如果只有一个票号,则无需修改
if len(tickets) == 1:
continue
# 否则将票号进行合并
merged = []
start = end = tickets.iloc[0]
for ticket in tickets[1:]:
if ticket == end + 1:
end = ticket
else:
if start == end:
merged.append(str(start))
else:
merged.append(str(start) + '-' + str(end))
start = end = ticket
if start == end:
merged.append(str(start))
else:
merged.append(str(start) + '-' + str(end))
# 将合并后的票号更新到Excel表格中
df.loc[df['业务名称'] == name, '票号'] = ', '.join(merged)
# 更新整理后的Excel表格
df.to_excel('result.xlsx', index=False)
```
假设原始Excel表格的文件名为`data.xlsx`,运行上述代码后会生成一个名为`result.xlsx`的新Excel表格,其中业务名称和票号已经按照要求整理好了。