用Python写代码1. 在“电影信息统计.xlsx”文件中新增一个名为“演员组合参演统计”的sheet,分别统计二人组和三人组的情况。 2. 第一列填写演员组合,第二列填写演员组合参演电影数量,第三列填写演员组合参演电影列表。如果同一行中有多部电影,则以逗号(,)分隔。 3. 统计演员组合在所有电影中的参演情况,并按照参演电影数量降序排列,确保数量相同的组合按姓名升序排列。先写三人组合,再写二人组合。 4. 若某三人组合中已完全覆盖了其中的二人组合参演的所有电影,则不再统计该二人组合;若未完全覆盖,则仍需统计该二人组合。一部电影最多只统计出两个三人组合
时间: 2024-02-13 09:04:29 浏览: 71
以下是用Python实现的代码,需要使用openpyxl库来读写Excel文件。
```python
import openpyxl
# 打开Excel文件
workbook = openpyxl.load_workbook('电影信息统计.xlsx')
# 获取电影信息sheet
movies_sheet = workbook['电影信息']
# 获取演员信息sheet
actors_sheet = workbook['演员信息']
# 新增演员组合参演统计sheet
combos_sheet = workbook.create_sheet('演员组合参演统计')
# 初始化演员组合参演数据
combo_data = {}
# 统计三人组合
for i in range(2, actors_sheet.max_row + 1):
actor1 = actors_sheet.cell(row=i, column=2).value
for j in range(i + 1, actors_sheet.max_row + 1):
actor2 = actors_sheet.cell(row=j, column=2).value
for k in range(j + 1, actors_sheet.max_row + 1):
actor3 = actors_sheet.cell(row=k, column=2).value
combo = ','.join(sorted([actor1, actor2, actor3]))
movies = set()
for row in range(2, movies_sheet.max_row + 1):
if actor1 in movies_sheet.cell(row=row, column=4).value and \
actor2 in movies_sheet.cell(row=row, column=4).value and \
actor3 in movies_sheet.cell(row=row, column=4).value:
movies.add(movies_sheet.cell(row=row, column=1).value)
if combo in combo_data:
combo_data[combo]['movies'].update(movies)
else:
combo_data[combo] = {'count': 0, 'movies': movies}
if len(combo_data[combo]['movies']) >= 2:
combo_data[combo]['count'] += 1
# 统计二人组合
for i in range(2, actors_sheet.max_row + 1):
actor1 = actors_sheet.cell(row=i, column=2).value
for j in range(i + 1, actors_sheet.max_row + 1):
actor2 = actors_sheet.cell(row=j, column=2).value
combo = ','.join(sorted([actor1, actor2]))
if combo in combo_data:
continue
movies = set()
for row in range(2, movies_sheet.max_row + 1):
if actor1 in movies_sheet.cell(row=row, column=4).value and \
actor2 in movies_sheet.cell(row=row, column=4).value:
movies.add(movies_sheet.cell(row=row, column=1).value)
combo_data[combo] = {'count': len(movies), 'movies': movies}
# 将演员组合参演数据写入Excel
combos_sheet.cell(row=1, column=1, value='演员组合')
combos_sheet.cell(row=1, column=2, value='演员组合参演电影数量')
combos_sheet.cell(row=1, column=3, value='演员组合参演电影列表')
row_num = 2
for combo in sorted(combo_data.keys(), key=lambda x: (-combo_data[x]['count'], x)):
if len(combo.split(',')) == 2 and combo_data[combo]['count'] == 0:
continue
combos_sheet.cell(row=row_num, column=1, value=combo)
combos_sheet.cell(row=row_num, column=2, value=combo_data[combo]['count'])
combos_sheet.cell(row=row_num, column=3, value=','.join(sorted(combo_data[combo]['movies'])))
row_num += 1
# 保存Excel文件
workbook.save('电影信息统计.xlsx')
```
代码中首先打开Excel文件,并获取电影信息和演员信息两个sheet。接着新增一个名为“演员组合参演统计”的sheet,并初始化演员组合参演数据。然后分别统计三人组合和二人组合的情况,并将统计结果存储在演员组合参演数据中。最后将演员组合参演数据写入Excel文件的新sheet中,并保存Excel文件。
注意:代码中的Excel文件名应该与实际文件名相同。
阅读全文