Pandas DataFrame按A、B列分组计算C列不同取值对应的D列比值
实现步骤
你可以按照如下操作完成计算:
- 首先确认你的DataFrame已经将A、B、C设为多级索引,若还未设置可先执行:
import pandas as pd # 若A、B、C是普通列,先转为多级索引 df = df.set_index(['A', 'B', 'C'])
- 把C索引的取值转为列,方便提取C=0和C=1对应的D值:
# 提取D列,将C级索引展开为列 df_unstack = df['D'].unstack(level='C')
- 计算新列:
- 如果你需要的是数值计算结果(也就是除法后的商):
df_unstack['NEW'] = df_unstack[1] / df_unstack[0]- 如果你需要的是示例里的字符串拼接格式(比如
4/32):
df_unstack['NEW'] = df_unstack[1].astype(str) + '/' + df_unstack[0].astype(str) - 最终筛选保留NEW列,即可得到你需要的结构:
result = df_unstack[['NEW']]
验证示例
你可以用下面的测试数据验证效果:
# 构造测试数据 data = { 'A': [1,1,1,1,1,1,2,2], 'B': [1,1,2,2,3,3,1,1], 'C': [0,1,0,1,0,1,0,1], 'D': [32,4,43,12,58,34,37,5] } df = pd.DataFrame(data).set_index(['A','B','C']) # 执行上述计算逻辑后输出result,结构和需求完全一致
内容的提问来源于stack exchange,提问作者L. W.
相关产品推荐
相关产品推荐

