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
相关产品推荐
相关产品推荐

