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

如何基于Pandas DataFrame列值计算条件比率并新增+5Ratio列

实现DataFrame新增'+5Ratio'列的解决方案

嘿,这个需求很明确,我来帮你搞定!首先先确认下你的原始数据和需求:

你有这样一个DataFrame:

import pandas as pd

df = pd.DataFrame({'Days':[1,2,5,6,7,10,11,12], 'Value':[100.3,150.5,237.0,314.15,188.0,413.0,158.2,268.0]})

输出的原始数据如下:

Days   Value
0     1  100.30
1     2  150.50
2     5  237.00
3     6  314.15
4     7  188.00
5    10  413.00
6    11  158.20
7    12  268.00

你需要新增一列+5Ratio,值为当前行Days加5对应的Value除以当前行的Value。比如第一行Days=1,加5是6,对应Value是314.15,所以比率是314.15/100.3≈3.1321。

解决方案步骤

最简洁高效的方式是先建立一个Days到Value的映射字典,然后通过apply计算每一行的比率:

# 1. 创建Days到Value的映射字典,方便快速查找
value_dict = df.set_index('Days')['Value'].to_dict()

# 2. 新增+5Ratio列:对每个Days,查找Days+5对应的Value,计算比率;如果Days+5不存在则返回NaN
df['+5Ratio'] = df['Days'].apply(lambda x: value_dict.get(x+5)/value_dict[x] if (x+5) in value_dict else None)

运行结果

执行完上述代码后,你的DataFrame会变成这样:

DaysValue+5Ratio
1100.33.1321
2150.51.24917
52371.74262
6314.150.502945
71882.19681
104130.649153
11158.2NaN
12268NaN

说明

  • 最后两行Days=11和Days=12,加5后分别是16和17,不在原始的Days列表里,所以对应的+5Ratio返回None(显示为NaN),符合预期。
  • 用字典映射的方式比逐行查找的效率更高,尤其是当你的DataFrame数据量较大时,这个方法会更流畅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:11:33