如何在Pandas中按行分组计算B/A比值并转换DataFrame格式?
解决方案
该需求完全可以在Pandas中实现,具体实现逻辑如下:
你的样例数据中A、B严格按顺序两两配对,所以我们可以用索引整除2作为分组标识,对每组分别取B的Value和A的Value做除法,最终构造目标DataFrame即可。
完整实现代码:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame() df['Stage'] = ['A','B','A','B'] df['Value'] = ['3','0','2','4'] # 将Value列从字符串转为数值类型,才能进行除法运算 df['Value'] = pd.to_numeric(df['Value']) # 按每2行一组分组,计算每组内B的Value除以A的Value的比值 ratio_series = df.groupby(df.index // 2).apply( lambda group: group.loc[group['Stage'] == 'B', 'Value'].iloc[0] / group.loc[group['Stage'] == 'A', 'Value'].iloc[0] ) # 构造目标DataFrame result_df = pd.DataFrame({ 'Stage': ['B/A'] * len(ratio_series), 'Ratio': ratio_series.astype(int).astype(str) # 转为字符串匹配你给出的输出格式,不需要可以去掉这部分转换 }) print(result_df)
运行上述代码后输出结果和你要求的完全一致:
Stage Ratio 0 B/A 0 1 B/A 2
如果你实际业务数据中A、B的配对规则不是按顺序两两排列,可以调整groupby的分组规则,比如如果有单独的组ID字段,直接用组ID作为分组键即可。
内容的提问来源于stack exchange,提问作者nununu
相关产品推荐
相关产品推荐

