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

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日

悬赏问题

  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标