kuyoro 2022-05-04 16:35 采纳率: 92.7%
浏览 40
已结题

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实现上面一行代码功能?
  • 写回答

2条回答 默认 最新

  • lazyn 2022-05-04 16:51
    关注
    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 修改了问题 5月4日
  • 创建了问题 5月4日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改