python - 使用其他行中的值将函数应用于 pandas 数据框行

标签 python pandas lambda dataframe

我有一种情况,我有一个数据框行来执行计算,我需要使用后面(可能前面)行中的值来进行这些计算(本质上是基于真实数据集的完美预测)。我从之前的 df.apply 调用中获取每一行,因此我可以将整个 df 传递给下游对象,但根据我分析中对象的复杂性,这似乎不太理想。

我发现了一个密切相关的问题和答案 [1],但问题实际上根本不同,因为我的计算不需要整个 df,只需以下 x 数量行(这对于大型 df 可能很重要)。

所以,例如:

df = pd.DataFrame([100, 200, 300, 400, 500, 600, 700, 800, 900, 1000], 
                  columns=['PRICE'])
horizon = 3

我需要在按行的 df.apply 调用中访问以下 3 (horizo​​n) 行中的值。如何在我的行式应用计算中动态地获得对接下来 3 个数据点的简单预测?例如对于第一行,PRICE100,我需要在我的计算中使用 [200, 300, 400] 作为预测.

[1] apply a function to a pandas Dataframe whose returned value is based on other rows

最佳答案

通过使用 row.namedf.apply() 调用中获取行的索引,您可以生成相对于当前所在行的“预测”数据。这实际上是一个将“预测”放入相关行的预处理步骤,或者如果 df 在下游可用,它可以作为初始 df.apply() 调用的一部分完成。

df = pd.DataFrame(
    [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000],
    columns=["PRICE"]
)
horizon = 3
    
df["FORECAST"] = df.apply(
    lambda x: [df["PRICE"][x.name + 1 : x.name + horizon + 1]],
    axis=1
)

结果:

   PRICE          FORECAST
0    100   [200, 300, 400]
1    200   [300, 400, 500]
2    300   [400, 500, 600]
3    400   [500, 600, 700]
4    500   [600, 700, 800]
5    600   [700, 800, 900]
6    700  [800, 900, 1000]
7    800       [900, 1000]
8    900            [1000]
9   1000                []

可以在您的行式 df.apply() 计算中使用。

编辑: 如果您想从生成的“预测”中删除索引:

df["FORECAST"] = df.apply(
    lambda x: [df["PRICE"][x.name + 1 : x.name + horizon + 1].reset_index(drop=True)],
    axis=1
)

关于python - 使用其他行中的值将函数应用于 pandas 数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37149358/

相关文章:

python - python中递归函数的返回参数

python - 您如何使用 pd.read_clipboard 读取带有列表的数据框?

python - Pandas 箱线图中共享轴的不同 ylim

c# - Expression 和 Delegate 之间的转换错误

c# - 给定这个 lambda,我如何使用表达式树手动编写它?

c# - 为任何方法创建 Func 或 Action(在 C# 中使用反射)

python - 点击模块的单元测试

python - 在 pandas 中查询时,如何跳过 None 的过滤器?

python - numpy 从索引列表创建 3D 数组

python - pandas read_csv 列 dtype 设置为十进制但转换为字符串