我想通过Python系统计算质量平衡。在我当前的示例中,每天大约有35,000条记录,但是我想将代码重用于包含更多数据的示例中。
我有一个CSV文件,可捕获以下各项的每日数据:
我想计算出前几天和后几天的新数据列。例如,我要计算表示以下内容的其他列:
我是Python的新手,并认为我将对数据使用Pandas,因为我可以将所有数据保持在一起。我使用np.where进行了使用同一行单元格的简单条件计算。
bal['Q_IL2TR'] = np.where(bal['Q_PS2IL']<FullTreatementFloMLDs, bal['Q_PS2IL'], FullTreatementFloMLDs)
是否可以遍历数据框,并根据上一行/下一行的列中的单元格创建新的列值?也是解决该问题的最佳方法。
答案 0 :(得分:2)
不要首先尝试遍历DataFrame。太慢了相反,请尝试根据向量做所有事情。
顺便说一句,
bal['Q_IL2TR'] = np.where(bal['Q_PS2IL']<FullTreatementFloMLDs, bal['Q_PS2IL'], FullTreatementFloMLDs)
应该更简单地写为:
bal['Q_IL2TR'] = bal['Q_PS2IL'].clip(upper=FullTreatementFloMLDs)
对于这样的事情:
灌溉-如果前3天的降雨量小于10mm,而随后5天没有降雨,则按设定的体积灌溉
您可以创建窗口大小为3和5的滚动总和,将其作为新列存储在DataFrame中,然后使用它们来创建条件:
last3 = df.Rain.rolling(3, closed=False).sum() # n.b. you might want 4
next5 = df.Rain.rolling(5, closed=False).sum()
df['Irrigate'] = (last3 < 10) & (next5 == 0)