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

