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

在Python中基于两个独立DataFrame进行分组计算

解决按group和sub-group计算value1/value2的问题

核心思路

不需要单独使用groupby,直接通过**合并(merge)**将两个DataFrame按group和sub-group对齐,再计算比值是最直接的方案——因为你需要的是两个DF中对应分组的数值匹配计算,而非单DF的聚合操作。

步骤实现

1. 合并两个DataFrame(保留所有分组组合)

使用outer join模式合并,确保两个DF中所有group+sub-group的组合都被保留,缺失的value1或value2会自动填充为NaN:

import pandas as pd

# 你的原始DataFrame定义
df1 = pd.DataFrame({'sub-group':['2020','2030','2040','2030','2040','2030','2040'], 
                    'group':['a', 'a', 'a', 'b', 'b', 'c', 'c'],
                    'value1':[12,11,41,33,66,22,20]})

df2 = pd.DataFrame({'sub-group':['2020','2030','2040', '2020', '2030','2040','2030','2040'], 
                    'group':['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'],
                    'value2':[10,20,30,15,45,60,12,36]})

# 按group和sub-group做outer合并
merged_df = pd.merge(df1, df2, on=['group', 'sub-group'], how='outer')

2. 计算比值并处理缺失值

直接对合并后的DF做除法运算,不匹配的分组会得到NaN;如果需要将NaN替换为0,使用fillna()即可:

# 计算value1/value2,不匹配的分组返回NaN
merged_df['value_ratio'] = merged_df['value1'] / merged_df['value2']

# 可选:将NaN替换为0
merged_df['value_ratio'] = merged_df['value_ratio'].fillna(0)

最终结果示例

合并并计算后的DF会包含所有分组组合,比如group=b, sub-group=2020的value1为NaN,对应的value_ratio会是NaN(或替换后的0):

groupsub-groupvalue1value2value_ratio
a202012101.2
a203011200.55
a204041301.3667
b2020NaN15NaN(或0)
b203033450.7333
b204066601.1
c203022121.8333
c204020360.5556

补充:如果必须用groupby的方案

如果一定要基于groupby实现,可先对两个DF分别按分组提取数值,再合并计算:

# 对df1按分组取value1(每个分组仅一条记录,用first/sum均可)
df1_grouped = df1.groupby(['group', 'sub-group'])['value1'].first().reset_index()
# 对df2同理
df2_grouped = df2.groupby(['group', 'sub-group'])['value2'].first().reset_index()
# 合并并计算比值
merged_grouped = pd.merge(df1_grouped, df2_grouped, on=['group', 'sub-group'], how='outer')
merged_grouped['value_ratio'] = merged_grouped['value1'] / merged_grouped['value2']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:55:31