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

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 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启