Python 使用嵌套循环创建数据帧

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

我想创建一个包含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, 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呢?正如我所说,您对它们应用相同的迭代过程。列出你想要的值,然后分配给它。我试过了。。见上文,但有些地方不太对劲