如何基于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会变成这样:
| Days | Value | +5Ratio |
|---|---|---|
| 1 | 100.3 | 3.1321 |
| 2 | 150.5 | 1.24917 |
| 5 | 237 | 1.74262 |
| 6 | 314.15 | 0.502945 |
| 7 | 188 | 2.19681 |
| 10 | 413 | 0.649153 |
| 11 | 158.2 | NaN |
| 12 | 268 | NaN |
说明
- 最后两行
Days=11和Days=12,加5后分别是16和17,不在原始的Days列表里,所以对应的+5Ratio返回None(显示为NaN),符合预期。 - 用字典映射的方式比逐行查找的效率更高,尤其是当你的DataFrame数据量较大时,这个方法会更流畅。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

