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

如何合并两个Pandas Series?分组聚合结果合并方案

合并分组聚合结果的实现方案

问题背景

现有如下结构的DataFrame:

Date           Description Deposits Withdrawls Balance
0       21-Aug-2020    Cash        0.00     10612.14   53063.19
...     ...            ...         ...      ...        ...
1000000 15-Nov-2155    Cheque      0.00     12345.00   55511.00

执行两组分组聚合操作后得到两个Series:

  • res1:按Date分组的Withdrawls均值
    Date
    2020-08-21  77189.019273
    ...
    2155-11-15  125627.741943
    Name: Withdrawls, Length: 49394, dtype: float64
    
  • res2:按Date+Description分组的Withdrawls均值
    Date       Description
    2020-08-21 ATM          76862.370556
               Bill         44174.444545
               ...          ...
    2155-11-15 Purchase     95530.093750
               RTGS         306642.666000
               ...          ...
    Name: Withdrawls, Length: 650468, dtype: float64
    

需要将二者合并为指定格式:Type列空值对应res1的日期级均值,非空值(格式为Description="xxx")对应res2的细分维度均值。

实现步骤

1. 转换并处理两个聚合结果

分别将res1和res2转为DataFrame,调整列结构以匹配目标格式:

处理res1(日期级聚合结果)

将Series转为DataFrame,重置索引后添加空值的Type列:

import pandas as pd

# 转换res1为DataFrame,重命名均值列为Avg
df_res1 = res1.reset_index(name='Avg')
# 给日期级结果设置空Type
df_res1['Type'] = ''

处理res2(日期+描述级聚合结果)

将多级索引的Series转为DataFrame,生成指定格式的Type列后删除冗余的Description列:

# 转换res2为DataFrame,重命名均值列为Avg
df_res2 = res2.reset_index(name='Avg')
# 生成指定格式的Type列
df_res2['Type'] = 'Description="' + df_res2['Description'] + '"'
# 删除不再需要的Description列
df_res2 = df_res2.drop('Description', axis=1)

2. 合并结果并整理

将两个处理后的DataFrame合并,按需排序:

# 合并两个DataFrame,忽略原有索引
final_df = pd.concat([df_res2, df_res1], ignore_index=True)
# 按Date排序(可选,根据需求调整)
final_df = final_df.sort_values(by='Date').reset_index(drop=True)

3. 扩展支持Min/Max列(可选)

如果需要加入Min和Max列,只需在处理阶段对应添加即可:

# 假设已有res1_min、res1_max(按Date分组的Withdrawls最小/最大值)
df_res1['Min'] = res1_min.values
df_res1['Max'] = res1_max.values

# 假设已有res2_min、res2_max(按Date+Description分组的Withdrawls最小/最大值)
df_res2['Min'] = res2_min.values
df_res2['Max'] = res2_max.values

# 再执行合并操作
final_df = pd.concat([df_res2, df_res1], ignore_index=True).sort_values(by='Date').reset_index(drop=True)

最终得到的final_df即为符合要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:51:23