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

如何使用Pandas添加基于同press下新旧cond的ratios计算列?

问题描述

给定如下数据集:

ID cond  press  metrics
0  h1  new     30      1.2
1  h2  old     30      1.0
2  h3  new     50      1.5
3  h4  old     50      1.4
4  h5  new     70      1.8

需要给数据集添加一列名为ratios的列,规则如下:

  • 仅当cond为new,且同一press分组下存在cond为old的记录时,ratios的值为old的metrics值/new的metrics值的字符串形式(如1.0/1.2)
  • 其余情况(cond为old,或同一press下无对应old记录的new行),ratios填充为0

最终期望得到的结果:

ID cond  press  metrics   ratios
0  h1  new     30      1.2  1.0/1.2
1  h2  old     30      1.0        0
2  h3  new     50      1.5  1.4/1.5
3  h4  old     50      1.4        0
4  h5  new     70      1.8        0
解决方案(Python Pandas实现)

可以通过以下代码实现需求:

import pandas as pd

# 构造原始数据集
data = {
    'ID': ['h1', 'h2', 'h3', 'h4', 'h5'],
    'cond': ['new', 'old', 'new', 'old', 'new'],
    'press': [30, 30, 50, 50, 70],
    'metrics': [1.2, 1.0, 1.5, 1.4, 1.8]
}
df = pd.DataFrame(data)

# 提取每个press对应的old组metrics值
old_metrics = df[df['cond'] == 'old'].set_index('press')['metrics'].rename('old_metric')

# 合并原数据与匹配到的old组metrics值
df = df.merge(old_metrics, on='press', how='left')

# 生成ratios列
df['ratios'] = df.apply(
    lambda row: f"{row['old_metric']}/{row['metrics']}" if row['cond'] == 'new' and pd.notna(row['old_metric']) else 0,
    axis=1
)

# 删除中间辅助列
df = df.drop(columns='old_metric')

# 打印结果
print(df.to_string(index=False))

运行代码后输出的结果与期望一致:

ID cond  press  metrics   ratios
 h1  new     30      1.2  1.0/1.2
 h2  old     30      1.0        0
 h3  new     50      1.5  1.4/1.5
 h4  old     50      1.4        0
 h5  new     70      1.8        0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:33:58