【发布时间】:2020-09-08 19:52:55
【问题描述】:
我对以下行为感到非常困惑:我有一个循环,它根据pandas.DataFrame 创建模拟数据。每次迭代的输出都是带有新列的新 pandas.DataFrame(以下示例中的 x2)。
import pandas as pd
import random
mydf = pd.DataFrame({"x":[0]*2})
def addrand(x):
return(x+random.normalvariate(0,1))
mysimulation = []
mycontrol = []
for i in range(0,5):
mydf["x2"] = mydf["x"].apply(addrand)
mydf["i"] = i
mycontrol.append(i)
mysimulation.append(mydf)
pd.concat(mysimulation)
#> x x2 i
0 0 1.023330 4
1 0 -0.428686 4
0 0 1.023330 4
1 0 -0.428686 4
0 0 1.023330 4
1 0 -0.428686 4
0 0 1.023330 4
1 0 -0.428686 4
0 0 1.023330 4
1 0 -0.428686 4
由reprexpy package于 2020-09-08 创建
让我感到困惑的是:虽然pandas.DataFrames 的结果列表包含预期数量的 DataFrame 行(2 x 5 = 10),但它们只是上一次迭代的 5 个副本。从id 列可以清楚地看到这一点。它应该包含数字 0 到 4,但仅包含数字 4。而在手边,列表 mycontrol 的行为与预期相同,并包含数字 0 到 4。
为什么会这样?我该如何解决这个问题?
【问题讨论】:
标签: python pandas dataframe loops for-loop