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

使用Pandas从Date列生成新列并实现数据聚合与差值计算

Pandas实现按Type分组聚合年份总和并生成衍生列

完整实现代码

import pandas as pd

# 假设你的DataFrame已完成年份筛选
df = pd.DataFrame({
    'Date': ['2022', '2022', '2022', '2021', '2021', '2021'],
    'Type': ['Bin', 'Bin', 'Bin', 'Bin', 'Bin', 'Bin'],
    'Initial': ['S', 'S', 'S', 'B', 'B', 'B'],
    'Number': [5, 6, 9, 5, 7, 0]
})

# 1. 透视表聚合各年份Number总和
pivot_df = df.pivot_table(
    index='Type',
    columns='Date',
    values='Number',
    aggfunc='sum'
).reset_index()
# 调整列顺序为2022在前、2021在后
pivot_df = pivot_df[['Type', '2022', '2021']]

# 2. 生成Initial组合列(按年份倒序拼接)
initial_df = df[['Type', 'Date', 'Initial']].drop_duplicates()
# 按Date降序排序,确保2022的Initial在前
initial_df = initial_df.sort_values('Date', ascending=False)
# 按Type分组拼接Initial
initial_df = initial_df.groupby('Type')['Initial'].apply('/'.join).reset_index(name='Initial')

# 3. 合并数据并计算差值列
result_df = pd.merge(pivot_df, initial_df, on='Type')
result_df['Difference'] = result_df['2022'] - result_df['2021']

print(result_df)

代码分步解释

  • 透视表聚合:用pivot_table按Type分组,将Date转为列,对Number求和,直接得到各年份的总数值。
  • 生成Initial组合列:先去重保留每个Type+Date对应的唯一Initial,按年份倒序排序后,用groupby+apply('/'.join)拼接成S/B格式。
  • 合并与差值计算:将聚合结果和Initial组合列合并,最后通过简单的列运算得到Difference列(2022年总和减2021年总和)。

注意事项

你之前的筛选代码df = df.loc[df["Date"].between("2022", "2021")]参数顺序有误,between的第一个参数是左边界、第二个是右边界,正确写法应为df = df.loc[df["Date"].between("2021", "2022")],否则可能无法正确筛选出目标年份数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:03:56