我想创建一个包含 3 列的数据框:
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
答案 0 :(得分:0)
这比你做的要容易得多。你只是在计算:
df['ID'] = list(range(1, 3501))
对其他两行中的每一行应用相同的 range
迭代。在某些情况下,您可能还想使用 NumPy 的范围切片来生成列表。
问题的第二部分,OP更新后:
长期的问题是您正在尝试应用您尚未开发的迭代技能。请返回关于循环的基本材料并继续研究,直到您学会将循环视为单个控制概念,而不是一系列断开连接的操作。
也就是说,这里的核心问题是,尽管您希望从嵌套循环中获得 3500 行结果,但没有尝试对运行到 3500 个值的索引执行任何操作。
辅助问题是您添加了“影子”变量 x
和 y
,它们除了保持与循环索引相同的值外什么也不做。如上所述,您应该转储这些变量并简单地使用 pos_x
和 pos_y
。
现在,对于实际的解决方案。首先,我们将修复循环。对于给定的 DF 行 k,您必须从二维数组中提取 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 个值的构造列表中的单个赋值来执行此操作:正是我在本文顶部推荐的。复制元素和复制整个列表是供您查找或简单地从基本列表操作派生的技术。