创建具有列表推导式的数据帧,每一列都依赖于前一列

Create dataframe with list comprehension with each column dependent on the previous

提问人:flowover9 提问时间:9/6/2023 最后编辑:flowover9 更新时间:9/7/2023 访问量:50

问:

我需要创建一个具有列表推导功能的数据帧,其中每一列都等于前一列的转换。

但是,每一列都不依赖于前一列。

我只有第一列:

0.0229
0.0229
0.0229

我要应用的公式是:-0.0126*(1.22 + 前几列的水平和)+ 0.0383

这样,这些列如下所示,全部在一行列表中推导:

0        1                          2
0.0229   (-0.0126*(1.22 + col0))  (-0.0126*(1.22 + col0 + col1))
0.0229   (-0.0126*(1.22 + col0))  (-0.0126*(1.22 + col0 + col1))
0.0229   (-0.0126*(1.22 + col0))  (-0.0126*(1.22 + col0 + col1))
python 循环 list-comprehension

评论


答:

1赞 not_speshal 9/6/2023 #1

在列表推导式中,您继续引用同一列“col1”,而不是前一列。

您可以使用以下命令循环和引用上一列:

df = pd.DataFrame({0: [0.0229]*3})
x = -0.0126
y = 1.22
z = 0.0383

for i in range(1,3):
    df[i] = x*(y+df.sum(axis=1))+z

>>> df

        0         1         2
0  0.0229  0.022639  0.022354
1  0.0229  0.022639  0.022354
2  0.0229  0.022639  0.022354

如果必须使用列表推导式,则需要使用数学归纳法来弄清楚列与列 0 的关系。在你的例子中,它是:n

enter image description here

x = -0.0126
y = 1.22
z = 0.0383

new_df = pd.concat([(1+x)**(i-1)*(x*(y+df[0])+z) for i in range(3)],axis=1)

>>> new_df
          0         0         0
0  0.022928  0.022639  0.022354
1  0.022928  0.022639  0.022354
2  0.022928  0.022639  0.022354

评论

0赞 flowover9 9/7/2023
您正在乘以索引 i,即 0,1,2。我为什么要这样做?我不希望我的列乘以索引
0赞 not_speshal 9/7/2023
不。我正在使用其中的值并向其添加 2 的次数。这基本上就是您在将 2 添加到“上一”列时正在做的事情。df["col"]i
0赞 flowover9 9/7/2023
对不起,我编辑了,因为它应该是乘法,而不是总和
0赞 not_speshal 9/7/2023
编辑了答案
1赞 not_speshal 9/7/2023
这就是为什么一个具有代表性数据的最小可重复示例很重要的原因。无论 x 的值如何,上面的代码都应该有效。请更新您的帖子。另外,为什么必须使用“一行列表理解”?