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

如何将反应堆使用年份范围列转换为分年份列并填充标识值?

反应堆年份数据集转换解决方案

假设你的数据集已通过pandas加载,列名为Country、Reactor in use(启用年份,int64)、Reactor not in use(停用年份,int64),以下是实现目标格式的步骤:

1. 确定年份范围

先提取所有涉及的年份区间:

import pandas as pd

min_year = df['Reactor in use'].min()
max_year = df['Reactor not in use'].max()
year_columns = range(min_year, max_year + 1)

2. 生成单条记录的年份标识

为每一行反应堆记录生成对应年份的激活标记(1表示该年运行):

def build_year_row(row):
    # 生成当前反应堆的运行年份区间
    active_years = range(row['Reactor in use'], row['Reactor not in use'] + 1)
    # 初始化年份列,默认0,运行年份设为1
    year_data = pd.Series(0, index=year_columns)
    year_data.loc[active_years] = 1
    # 绑定国家名称
    year_data['Country'] = row['Country']
    return year_data

# 应用函数生成初始结果
temp_df = df.apply(build_year_row, axis=1)
# 调整列顺序,把Country放在最前面
temp_df = temp_df[['Country'] + list(year_columns)]

3. 合并同一国家的多条记录

如果同一国家有多个反应堆,合并后只要该年有任意反应堆运行就标记为1:

final_df = temp_df.groupby('Country').max().reset_index()

完整可运行代码

import pandas as pd

# 加载并预处理数据(你已完成年份列类型转换)
# df = pd.read_csv('your_dataset.csv')
# df['Reactor in use'] = df['Reactor in use'].astype('int64')
# df['Reactor not in use'] = df['Reactor not in use'].astype('int64')

# 确定年份范围
min_year = df['Reactor in use'].min()
max_year = df['Reactor not in use'].max()
year_columns = range(min_year, max_year + 1)

# 生成年份标记行
def build_year_row(row):
    active_years = range(row['Reactor in use'], row['Reactor not in use'] + 1)
    year_data = pd.Series(0, index=year_columns)
    year_data.loc[active_years] = 1
    year_data['Country'] = row['Country']
    return year_data

temp_df = df.apply(build_year_row, axis=1)
temp_df = temp_df[['Country'] + list(year_columns)]

# 合并国家记录
final_df = temp_df.groupby('Country').max().reset_index()

# 输出结果
print(final_df.head())

内容的提问来源于stack exchange,提问作者Viktor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:12:52