首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据数据中给定的值与遵循的规则进行排列-熊猫

将数据数据中给定的值与遵循的规则进行排列-熊猫
EN

Stack Overflow用户
提问于 2021-10-25 16:08:46
回答 1查看 154关注 0票数 2

我有一个水果计数dataframe.From的数据我有总数为7,这些水果将分发7天每果一天。

代码语言:javascript
复制
fruit  count   
apple  3  
orange 1  
lemon  1  
cherry 1  
banana 1

分割水果的规则:

1.苹果果实不应连续几天送出,苹果之间应保持至少一天的间隔。

2.橘子必须在day7上发送(即最后一天)。

3.在第6天,柠檬不应发送,在橙和柠檬之间应保持至少一天的间隔。

4.如果水果数超过7,则不要与苹果、樱桃或香蕉搭配任何其他带有柠檬和橘子的水果。

Expected_ouput

代码语言:javascript
复制
day fruit
d1   apple
d2   cherry
d3   apple
d4   lemon
d5   apple
d6   banana
d7   orange

案例1-少于7个水果

代码语言:javascript
复制
fruit  count   
apple  1  
orange 1  
lemon  1  
cherry 1  
banana 1

预期产出:

代码语言:javascript
复制
day fruit
d1   apple
d2   cherry
d4   lemon
d6   banana
d7   orange

案例2-7多个水果:

代码语言:javascript
复制
fruit  count  
apple  3  
orange 1
pomerante 1  
lemon  1  
cherry 1  
banana 1 

Expected_ouput

代码语言:javascript
复制
day fruit
d1   apple
d2   cherry
d3   apple
d3   pomegranate
d4   lemon
d5   apple
d6   banana
d7   orange

我试过:

代码语言:javascript
复制
apple = 3
orange = 1
week = 7
start_day=1
end_day = 8
days = [f"Day{i}" for i in range(start_day,end_day)]
profile = {key : [] for key in days}
profile["Day7"].append("orange")
c = 6 // apple

apple_day = 1
for i in range(apple):
    profile["Day{}".format(apple_day)].append("apple")
    apple_day += c

输出:

代码语言:javascript
复制
{'Day1': ['apple'],
 'Day2': [],
 'Day3': ['apple'],
 'Day4': [],
 'Day5': ['apple'],
 'Day6': [],
 'Day7': ['orange']}
EN

回答 1

Stack Overflow用户

发布于 2021-11-04 15:41:27

这是我最先进的解决方案,希望你能接受这个答案。

它适用于任何有解决方案的极端示例:

代码语言:javascript
复制
basket_of_fruits = ['apple','apple','apple','cherry','cherry','banana','banana','orange','lemon','kiwi','kiwi']
n_days = 7
# Create day plan
plan = {}
for i in range(n_days):
    plan['Day_'+str(i+1)] = []
# Set startiong values
apple_day = n_days % 2 +1
occupy = 1
days_occupied = []
# solve 1 orange
if 'orange' in basket_of_fruits:
    plan['Day_'+str(n_days)].append('orange')
    basket_of_fruits.remove('orange')
    days_occupied.append(n_days)
# solve 1 lemon
if 'lemon' in basket_of_fruits:
    plan['Day_'+str(n_days-2)].append('lemon')
    basket_of_fruits.remove('lemon')
    days_occupied.append(n_days-2)
# solve other fruit then apple, cherry or banana
basket_of_fruits_rest = basket_of_fruits.copy()
while 'apple' in basket_of_fruits_rest:
    basket_of_fruits_rest.remove('apple')
while 'cherry' in basket_of_fruits_rest:
    basket_of_fruits_rest.remove('cherry')
while 'banana' in basket_of_fruits_rest:
    basket_of_fruits_rest.remove('banana')
for i in range(len(basket_of_fruits_rest)):
    while occupy in days_occupied:
        occupy += 1
        if occupy > n_days:
            days_occupied = [n_days,n_days-2]
            occupy -= n_days
    selected_fruit = basket_of_fruits_rest[i]
    plan['Day_'+str(occupy)].append(selected_fruit)
    basket_of_fruits.remove(selected_fruit)
    days_occupied.append(occupy)
    occupy += 1

# solve cherry or banana
basket_of_fruits_rest = basket_of_fruits.copy()
while 'apple' in basket_of_fruits_rest:
    basket_of_fruits_rest.remove('apple')
for i in range(len(basket_of_fruits_rest)):
    while occupy in days_occupied:
        occupy += 1
        if occupy > n_days:
            days_occupied = [n_days,n_days-2]
            occupy -= n_days
    selected_fruit = basket_of_fruits_rest[i]
    plan['Day_'+str(occupy)].append(selected_fruit)
    basket_of_fruits.remove(selected_fruit)
    days_occupied.append(occupy)
    occupy += 1
    
# solve apples
while 'apple' in basket_of_fruits:
    while ('lemon' in plan['Day_'+str(apple_day)]) | ('orange' in plan['Day_'+str(apple_day)]) :
        apple_day += 2
        if apple_day > n_days:
            apple_day -= n_days-1
    
        
    plan['Day_'+str(apple_day)].append('apple')
    basket_of_fruits.remove('apple')
    apple_day += 2
    if apple_day > n_days:
        apple_day -= n_days-1

返回:

代码语言:javascript
复制
{'Day_1': ['kiwi', 'banana'],
 'Day_2': ['kiwi', 'apple'],
 'Day_3': ['cherry'],
 'Day_4': ['cherry', 'apple'],
 'Day_5': ['lemon'],
 'Day_6': ['banana', 'apple'],
 'Day_7': ['orange']}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69711415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档