python - 改进此循环以使其更可python化的方法
问题描述
我需要在列和行之间进行操作。我在“for”循环中开发了一些代码库。我知道使用数据框操作(熊猫)可以表现得更好,我尝试了不同的方法,但没有奏效。也许你可以帮助我。
for i in range(1, len(df)):
if i == 1:
df['A'][i] = df['D'][i]
elif df['B'][i] == 1:
df['A'][i] = df['A'].shift()[i] + df['C'][i]
elif df['B'][i] == 0:
df['A'][i] = df['A'].shift()[i]
资源:
Date B D X C A
2004-03-03 0.0 1122 59 0.0 0.0
2004-03-03 0.0 1151 59 0.0 0.0
2004-03-04 0.0 1154 68 0.0 0.0
2004-03-05 0.0 1156 72 0.0 0.0
2004-03-08 0.0 1147 38 0.0 0.0
2004-03-09 0.0 1140 27 0.0 0.0
2004-03-10 0.0 1123 13 0.0 0.0
2004-03-11 0.0 1106 8 0.0 0.0
2004-03-12 1.0 1120 36 14 0.0
2004-03-15 1.0 1104 24 -16 0.0
2004-03-16 1.0 1110 35 6 0.0
2004-03-17 1.0 1123 53 13 0.0
结果:
Date B D X C A
2004-03-02 0.0 1122 59 0.0 1122
2004-03-03 0.0 1151 59 0.0 1122
2004-03-04 0.0 1154 68 0.0 1122
2004-03-05 0.0 1156 72 0.0 1122
2004-03-08 0.0 1147 38 0.0 1122
2004-03-09 0.0 1140 27 0.0 1122
2004-03-10 0.0 1123 13 0.0 1122
2004-03-11 0.0 1106 8 0.0 1122
2004-03-12 1.0 1120 36 14 1135
2004-03-15 1.0 1104 24 -16 1118
2004-03-16 1.0 1110 35 6 1124
2004-03-17 1.0 1123 53 13 1137
解决方案
你可以做类似的事情
df[A] = (df['A'] == 1) * (df['A'].shift() + df['C']) + df['A'].shift()[i] + (df['A'] == 0)
df['A'][0] = df['D'][1]
它不会使用循环,但我认为它会更快。我替换i = 1
为i = 0
因为 pandas 数据帧中的索引从 0 而不是 1
推荐阅读
- javascript - 如何避免从事件监听器重新渲染无限循环(React)
- swift - 如何持久化计算属性 SwiftUI 2.0 Xcode 12.3
- svg - 具有巨大尺寸的 SVG 字形
- c# - 我创建了一个无限循环,但我不知道为什么
- java - 如何修复项目构建路径错误?我无法为 Java 8/9 计算器应用程序导入 java.lang.math
- c++ - 可变模板类型
- ios - 为自定义控件复制用于 SwiftUI GraphicalDatePickerStyle 的背景模糊
- php - 使用 Cloudflare 端口限制托管电子邮件
- android - Pusher 监听器在一段时间后停止
- oracle - 是否可以在 PL SQL 的触发器中处理 NO_DATA_FOUND 异常?