Python 使用嵌套循环创建数据帧
我想创建一个包含3列的数据框:Python 使用嵌套循环创建数据帧,python,pandas,for-loop,nested-loops,Python,Pandas,For Loop,Nested Loops,我想创建一个包含3列的数据框: cols=('ID','Y\u Start','X\u Start') 我是在普劳恩的回答的帮助下走到这一步的 stepsminus = -0.0009009009 steps = 0.0009009009 List1 = [] # 35 for i in np.arange(48.34, 48.309, stepsminus): List1.append(i) List2 = [] # 100 for i in np.arange(16.0108, 1
cols=('ID','Y\u Start','X\u Start')
我是在普劳恩的回答的帮助下走到这一步的
stepsminus = -0.0009009009
steps = 0.0009009009
List1 = [] # 35
for i in np.arange(48.34, 48.309, stepsminus):
List1.append(i)
List2 = [] # 100
for i in np.arange(16.0108, 16.1, steps):
List2.append(i)
df = pd.DataFrame(columns=cols)
df['ID'] = list(range(1, 3501))
现在我想相应地输入X和Y_的起始值。每行中有100列具有不同的值,每列中有35行具有不同的值。但行与行、列与列之间的值当然是相同的。我想用2个for循环来解决这个问题
然而,这就是我被困的地方。这就是我需要帮助的地方
df = pd.DataFrame(columns=cols)
df['ID'] = list(range(0, 3500))
y = -1
for pos_y in range(0, 35): # 35
x = 0
y = y + 1
for pos_x in range(0, 100): # 100
df['Y_Start'].iloc[y] = List_Y[pos_y]
df['X_Start'].iloc[x] = List_X[pos_x]
x = x + 1
df.head(102)
输出
ID Y_Start X_Start
0 0 48.34 16.0108
1 1 48.339099 16.011701
2 2 48.338198 16.012602
3 3 48.337297 16.013503
4 4 48.336396 16.014404
... ... ... ...
97 97 NaN 16.098187
98 98 NaN 16.099088
99 99 NaN 16.099989
100 100 NaN NaN
101 101 NaN NaN
102 rows × 3 columns
我想要这样的东西:
ID Y_Start X_Start
0 1 48.34 16.0108
1 2 48.34 16.011701
2 3 48.34 16.012602
3 4 48.34 16.013503
4 5 48.34 16.014404
这比你做的容易多了。你只是在数:
df['ID'] = list(range(1, 3501))
对其他两行中的每一行应用相同的范围
迭代。在某些情况下,您可能希望使用NumPy的范围切片来生成列表
OP更新后问题的第二部分: 长期的问题是,您试图应用尚未开发的迭代技能。请回到关于循环的基本材料,并继续学习这些内容,直到您学会将循环视为单个控制概念,而不是一系列断开连接的操作 这就是说,这里的中心问题是,尽管您希望从嵌套循环中获得3500行结果,但没有人试图对运行到3500个值的索引执行任何操作 辅助问题是您添加了“shadow”变量
x
和y
,它们除了保持与循环索引相同的值外,什么都不做。如前所述,您应该转储这些变量,只需使用pos\u x
和pos\u y
现在,我们来看看实际的解决方案。首先,我们将修复循环。对于给定的DF行k,必须从2D数组中提取x
和y
坐标。在你原来的帖子中,你已经做了相反的事情。使用周游的算法来获得:
for row in range(3500):
pos_x = row % 100
pos_y = row // 100
df['X_Start'].iloc[row] = List_X[pos_x]
df['Y_Start'].iloc[row] = List_Y[pos_y]
但是,我建议您使用3500个值的构建列表中的单个赋值来完成此操作:这正是我在本文顶部建议的。复制元素和复制整个列表,是您可以查找的技术,或者只是从基本列表操作派生出来的技术。X\u start和Y\u start呢?正如我所说,您对它们应用相同的迭代过程。列出你想要的值,然后分配给它。我试过了。。见上文,但有些地方不太对劲