pandas中eval函数中是否可以使用shift计算相邻两行平均值

pandas中eval函数可以以字符的形式传入计算表达式,对于存在大量复杂计算的情形,可以把excel中公式稍作修改,直接用于pd计算,省去pd中建模过程。
但现在碰到问题,如果使用eval函数,求相邻两行平均值?

import pandas as pd

df = pd.DataFrame({ '年份': ['15年', '16年', '17年'],
                    '人口': [13.97, 14.28, 15.26],
                    'GDP': [14.34, 15.43, 16.08],
                  })

"""
    年份     人口    GDP
0  15年  13.97  14.34
1  16年  14.28  15.43
2  17年  15.26  16.08
"""

df['平均GDP1'] = (df['GDP'].shift(-1)+df['GDP'])/2 # 常规公式,没有问题
df['平均GDP2'] = df.eval(' (GDP.shift(-1)+GDP)/2') # 本行代码报错!通过eval实现上面一行代码功能?
import pandas as pd

df = pd.DataFrame({'年份': ['15年', '16年', '17年'],
                   '人口': [13.97, 14.28, 15.26],
                   'GDP': [14.34, 15.43, 16.08],
                   })

"""
    年份     人口    GDP
0  15年  13.97  14.34
1  16年  14.28  15.43
2  17年  15.26  16.08
"""

df['平均GDP1'] = (df['GDP'].shift(1) + df['GDP']) / 2  # 常规公式,没有问题
df['平均GDP2'] = df.eval(' (GDP.shift(1)+GDP)/2')  # 本行代码报错!通过eval实现上面一行代码功能?
print(df)

改成.shift(1)可以运行,和上面结果一样

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632