You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas按国家分组生成53周升序数值序列的实现问询

解决Pandas按国家生成53周数据并映射排序后数值的问题

我完全明白你要实现的效果啦——给每个国家生成完整的53条周数据,同时把对应国家的Number值升序后依次映射到这些周里。咱们直接上实操步骤和代码,一步一步搞定:

步骤1:准备原数据

先把你给出的示例数据转换成Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Location': ['Austria', 'Austria', 'Belgium', 'Bulgaria', 'Bulgaria'],
    'week': [1, 2, 1, 2, 1],
    'Number': [154, 140, 139, 110, 164]
})

步骤2:定义分组处理函数

写一个专门处理单个国家分组的函数,完成周数生成、数值映射的核心逻辑:

def process_group(group):
    # 1. 生成1到53的完整周数序列
    weeks = pd.Series(range(1, 54), name='week')
    # 2. 对当前国家的Number值做升序排序
    sorted_numbers = group['Number'].sort_values().tolist()
    # 3. 循环填充排序后的数值,凑够53个(适配不同国家的原数据数量)
    repeat_times = 53 // len(sorted_numbers)
    remainder = 53 % len(sorted_numbers)
    mapped_numbers = sorted_numbers * repeat_times + sorted_numbers[:remainder]
    # 4. 构造当前国家的结果DataFrame
    result = pd.DataFrame({
        'Location': group['Location'].iloc[0],
        'week': weeks,
        'Number': mapped_numbers
    })
    # 如果你需要像示例那样把周数按降序排列(比如3、2、1),就打开下面这行注释:
    # result = result.sort_values('week', ascending=False).reset_index(drop=True)
    return result

步骤3:分组应用函数并合并结果

按国家分组后应用上面的函数,最后把所有分组的结果合并成最终DataFrame:

final_df = df.groupby('Location').apply(process_group).reset_index(drop=True)

补充说明几个细节

  • 周数顺序:如果不需要示例里的倒序,直接用默认的1-53正序即可;要是需要倒序,解开函数里的排序注释就行。
  • 数值映射逻辑:先对每个国家的Number升序排序,再循环这个排序后的序列来填充53周,完美贴合你“依次映射”的需求。比如Austria的Number升序后是[140,154],那么53周的Number会按140、154、140、154……的规律循环填充。
  • 适配性:不管每个国家原数据里有多少条Number记录,这个逻辑都能自动循环填充到53条,不用手动调整。

内容的提问来源于stack exchange,提问作者055931-YT14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:47:31