【发布时间】:2020-02-11 07:52:13
【问题描述】:
假定以下代码会遍历数据框并写入“有效”列。它只是将最后一个值写入“有效”中的所有行。
for index, row in lxrx.iterrows():
time_cur = (row['time'])
low_val = csvm.loc['LXRX', time_cur].low
price = (row['Price'])
if price > low_val:
lxrx['Valid'] = price
else:
lxrx['Valid'] = 'Invalid'
为了测试我使用了:print(price) & print(low_val)
它输出我所期望的 - 每个价格然后每个 low_val:
3.13 2.8 2.1 3.06 3.36 3.06
它输出左下方,而不是我想要的右下方。
Index Valid rather than Index Valid
0 3.36 0 3.13
1 3.36 1 2.10
2 3.36 2 3.36
我什至尝试在该循环中嵌套另一个 for 循环,以便我可以引用 Valid 中的每一行,但这也是同样的事情。如何让它正确写入每个值?
【问题讨论】:
-
我建议弄清楚如何使用
merge以及矢量化操作来实现您想要的结果。您不仅不太可能遇到这类问题,而且您的代码几乎肯定会运行得更快。 -
@PMende 是否可以比较不同长度的索引,但将所有行保持在较长的系列中,而不是较短的系列中删除重复项?
-
您能否包含一些来自 lxrx 和 csvm 的示例数据?一旦我们有了它,我就可以编写一个简单、惯用且有效的解决方案。
标签: python pandas loops numpy if-statement