【问题标题】:Calculting log of lagged value of a column in pandas计算熊猫中列的滞后值的日志
【发布时间】:2020-03-21 15:22:26
【问题描述】:

我想得到一个列的滞后值除以熊猫中该列的日志。

有一种简单的方法是添加这样的新列:

import pandas as pd
from numpy import log

df = pd.DataFrame({'reading': [2,3,4,5,6,7,8]})

df['lagged'] = df.reading.shift(1)
df['log'] = df.apply(lambda x: log(x['lagged']/ x['reading']), axis=1)

我想知道是否有更简单的方法可以在不添加新列的情况下执行此操作。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    你是对的,新的专栏是不必要的,apply 这里也是多余的。划分Series.shifted 列,然后将log 传递给Series 以提高性能:

    df['log'] = log(df.reading.shift() / df.reading)
    print (df)
       reading       log
    0        2       NaN
    1        3 -0.405465
    2        4 -0.287682
    3        5 -0.223144
    4        6 -0.182322
    5        7 -0.154151
    6        8 -0.133531
    

    【讨论】:

    • 谢谢@jezrael!快速跟进,我该如何解释分母为零的情况?我可以在 lambda 中使用 if else 结构并在 else 中使用 np.nan,这里有类似的语法吗?
    • @MehdiZare - 测试然后得到inf-inf,所以应该在我的解决方案之后替换为NaNs,检查this
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多