【问题标题】:calculating a row value in pandas with a previously calculated value using .apply and lambda使用 .apply 和 lambda 计算具有先前计算值的 pandas 中的行值
【发布时间】:2022-01-12 14:22:01
【问题描述】:

这段代码给出了我想要的结果:

  • 它取值 n-1 并从中计算 n

取“y”列中的前一个值,将其称为 y-1 并计算一个成为新 y 的值,然后在下一行中将新的 y 作为 y-1 并计算另一个新的 y

size = 10
x= range(1,size+1)
df = pd.DataFrame(data={'x': x,'y': size })

for n in range(1,len(x)):
    df['y'].iloc[n] = df['y'].iloc[n-1]*2

out:

    x   y
0   1   10
1   2   20
2   3   40
... ... ...
9   10  5120

我想把它放到一个 lambda 中,但不知怎么弄错了:

b=2
df['y'].loc[1::] = df['y'].shift(-1).apply(lambda x: x*b)

out:

    x   y
0   1   10.0
1   2   20.0
2   3   20.0
... ... ...

lambda 函数采用每行中的预填充值 (10),而不是向后移动 1 步并将前一个值作为乘法的基数

我查看了一些线程,但它超出了我的理解,如果我在这里处理递归并且这对于 lambdas 是不可能的?

recursive lambda-expressions possible?

Python Recursion on Pandas df

Can a lambda function call itself recursively in Python?

编辑: 我希望“y”中的后续条目与之前的“y”条目一起计算,从 idx 1 开始

DataFrame at start:

idx | y |
 0   10


DataFrame after 1st calc:
y1 = y0 *2

# *2 is a placeholder could be mx+b, or something else

idx | y |
 0   10
 1   20

【问题讨论】:

  • 您能描述一下您要做什么吗?

标签: python pandas lambda apply


【解决方案1】:

我不确定您是否需要进行任何递归,除非我误解这是数学指数。

请注意确定您的实际用例,但其中之一应该可以工作。

[v*(2**i) for i,v in enumerate(df.y)]    

df.apply(lambda j: j.y*(2**(j.x-1)), axis=1)

【讨论】:

  • my *2 只是作为函数的占位符,df['y'].iloc[n-1]*m+b
  • 然后将 2 换成 m 并添加 b 否?
  • 我编辑了问题,希望能让事情更清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 2013-04-15
相关资源
最近更新 更多