如何合并两个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: float64res2:按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
相关产品推荐
相关产品推荐

