python - 使用嵌套循环创建数据框
问题描述
我想创建一个包含 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
解决方案
这比你做的要容易得多。你只是在数:
df['ID'] = list(range(1, 3501))
对其他两行中的每一行应用相同的range
迭代。在某些情况下,您可能希望使用 NumPy 的范围切片来生成列表。
问题的第二部分,在 OP 更新后:
长期的问题是您正在尝试应用尚未开发的迭代技能。请回到你关于循环的基本材料并继续研究这些材料,直到你学会将循环视为一个单一的控制概念,而不是一系列不连贯的操作。
也就是说,这里的核心问题是,尽管您希望从嵌套循环中获得 3500 行结果,但没有尝试对运行到 3500 个值的索引执行任何操作。
辅助问题是您添加了“影子”变量x
and y
,除了保持与循环索引相同的值外,它们什么都不做。如给定的那样,您应该转储这些变量并简单地使用pos_x
and pos_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 个值的构造列表中的单个赋值来执行此操作:这正是我在这篇文章顶部的建议。复制元素和复制整个列表是供您查找或简单地从基本列表操作派生的技术。
推荐阅读
- javascript - 让 `node --prof` 在记录之前稍等片刻?
- javascript - Angular js允许字母字符和特殊字符,但不允许数字
- java - websphere中的String.class在哪里
- swift - Firebase,了解如何使用查询找到孩子并查看其孩子的价值?应用认证
- mysql - 执行动态数据透视表 MySQL 时出错
- java - 无法为 JSP:Tomcat 9 编译类
- mysql - 执行 SQL 查询
- sql-server - SSIS 工具框菜单可见,但单击时未在 Visual Studio 2015 中打开
- jestjs - Aurelia Jest 错误 - 加载器必须实现 loadTemplate
- ruby-on-rails - 在 ActiveRecord 模型中使用细化时出现 NoMethodError