在R中按10月-次年9月周期汇总us_assigned列并生成新dataframe
按年度周期(10月至次年9月)汇总DataFrame数据的高效方法
针对你需要按「当年10月至次年9月」的周期汇总us_assigned列的需求,完全不用手动切片,用Pandas的分组或时间重采样就能高效实现,以下是两种实用方案:
方案一:基于年份和月份生成分组键
适合未构建日期列的场景,直接通过现有Year和Month列生成分组标识:
import pandas as pd # 假设你的原始DataFrame名为df # 生成分组年度:将10-12月的记录归到「起始年」(如1953年10月属于1953年度周期) df['group_year'] = df.apply(lambda row: row['Year'] if row['Month'] <=9 else row['Year'] -1, axis=1) # 按分组年度求和,生成结果DataFrame summary_df = df.groupby('group_year')['us_assigned'].sum().reset_index() # 重命名列匹配需求 summary_df.rename(columns={'group_year': 'Year'}, inplace=True)
如果希望结果的Year列用周期结束年(如1953年10月-1954年9月对应1954),只需修改分组键的逻辑:
df['group_year'] = df.apply(lambda row: row['Year'] if row['Month'] <=9 else row['Year'] +1, axis=1)
方案二:用时间序列重采样(更直观)
先将年份和月份转为日期格式,利用Pandas的时间重采样功能直接按自定义年度周期汇总:
import pandas as pd # 构建完整日期列(默认每月1号) df['date'] = pd.to_datetime(df[['Year', 'Month']].assign(Day=1)) # 设置日期为索引 df.set_index('date', inplace=True) # 按「每年10月起始」的年度周期重采样求和 # 规则'AS-OCT'表示年度起始于10月,对应周期为上一年10月至本年9月 summary_df = df['us_assigned'].resample('AS-OCT').sum().reset_index() # 提取周期起始年作为结果的Year列(如2020-10-01对应2020年度周期) summary_df['Year'] = summary_df['date'].dt.year -1 # 整理最终列 summary_df = summary_df[['Year', 'us_assigned']]
如果需要用周期结束年作为Year列,直接取summary_df['date'].dt.year即可。
这两种方法都能自动遍历所有数据周期,无需手动指定行范围,数据更新后也能直接复用。
内容的提问来源于stack exchange,提问作者Vianey Rueda
相关产品推荐
相关产品推荐

