删除组合后需要满足可以再次输入规格等筛选数据,并且运算速度需要比较快速,结合以上要求生成函数
时间: 2024-03-11 14:46:58 浏览: 67
好的,我来生成一个函数来实现您的需求。下面是示例代码:
```python
import pandas as pd
import itertools
def find_combinations(df, spec, level):
# 筛选出符合条件的数据
filtered_df = df.loc[(df['规格'] == spec) & (df['级别'] == level)]
# 待套料管段长度和切割量
cutting_length = 1.5
pipe_lengths = filtered_df['长度'].tolist()
# 递归函数,用于求解满足条件的组合
def find_combinations_helper(total_length, selected_pipes, remaining_pipes):
# 如果剩余管段为空,则返回,说明已经找到一组满足条件的组合
if not remaining_pipes:
# 计算剩下的余料长度
remaining_length = total_length - sum(selected_pipes) - cutting_length * (len(selected_pipes) - 1)
if abs(remaining_length) < 1e-6:
# 输出满足条件的组合
print(filtered_df.columns.values.tolist())
print(selected_pipes)
return
# 递归求解
find_combinations_helper(total_length, selected_pipes + [remaining_pipes[0]], remaining_pipes[1:])
find_combinations_helper(total_length, selected_pipes, remaining_pipes[1:])
# 求解满足条件的组合
for i in range(1, len(pipe_lengths) + 1):
combinations = itertools.combinations(pipe_lengths, i)
for c in combinations:
find_combinations_helper(sum(c), [], list(c))
# 删除已使用的组合
df = df.drop(filtered_df.index)
return df
# 读取 xls 表格中的数据
df = pd.read_excel('your_file_name.xls')
# 输入规格和级别
spec = 10
level = 'A'
while True:
# 求解满足条件的组合
df = find_combinations(df, spec, level)
# 判断是否还有符合条件的数据
if len(df.loc[(df['规格'] == spec) & (df['级别'] == level)]) == 0:
break
```
在这个函数中,我们将原来的代码封装成了一个名为 find_combinations 的函数,输入为表格数据框、规格和级别,输出为删除已使用组合后的数据框。在 while 循环中,我们不断调用这个函数来求解满足条件的组合,并删除已使用的组合,直到没有符合条件的数据为止。这样可以实现快速的运算和多次输入规格等筛选数据的功能。
阅读全文