提问人:flowover9 提问时间:9/6/2023 最后编辑:flowover9 更新时间:9/7/2023 访问量:50
创建具有列表推导式的数据帧,每一列都依赖于前一列
Create dataframe with list comprehension with each column dependent on the previous
问:
我需要创建一个具有列表推导功能的数据帧,其中每一列都等于前一列的转换。
但是,每一列都不依赖于前一列。
我只有第一列:
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))
答:
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
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 的值如何,上面的代码都应该有效。请更新您的帖子。另外,为什么必须使用“一行列表理解”?
评论