繁体   English   中英

使用嵌套循环创建 Dataframe

[英]Creating a Dataframe with nested Loops

我想创建一个具有 3 列的 dataframe:

cols = ('ID', 'Y_Start','X_Start')

在 Prune 的回答的帮助下,我做到了这一点

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_start 值。 在每一行中,有 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))

对其他两行中的每一行应用相同的range迭代。 在某些情况下,您可能希望使用 NumPy 的范围切片来生成列表。


问题的第二部分,在 OP 更新后:

长期的问题是您正在尝试应用尚未开发的迭代技能。 请回到你关于循环的基本材料并继续研究这些材料,直到你学会将循环视为一个单一的控制概念,而不是一系列不连贯的操作。

也就是说,这里的核心问题是,尽管您希望从嵌套循环中获得 3500 行结果,但没有尝试对运行到 3500 个值的索引执行任何操作。

辅助问题是您添加了“影子”变量xy ,除了保持与循环索引相同的值之外,它们什么都不做。 如给定的那样,您应该转储这些变量并简单地使用pos_xpos_y

现在,对于实际的解决方案。 首先,我们将修复循环。 对于给定的 DF 行 k,您必须从 2D 数组中提取xy坐标。 您已经在原始帖子中以相反的方向完成了此操作。 使用广为人知的算术来获得这些:

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 个值的构造列表中的单个赋值来执行此操作:这正是我在这篇文章顶部的建议。 复制元素和复制整个列表是供您查找或简单地从基本列表操作派生的技术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM