【发布时间】:2022-01-04 10:54:11
【问题描述】:
我有一个 DataFrame,它是 Python 上更广泛脚本的一部分,具有以下特征:
- 索引
dtype='datetime64[ns]', length=365, freq='D' - 不同参数的每日值
- DOY 1 的默认值
- 我之前为某些特定日期计算的一对值。
迄今为止,数据框结构是这样的:
col1 col2 col3 col4 Condition value to calculate
2018-01-01 5.0 0.853232 0.992774 0.65377 0.0 0.65429
2018-01-02 0.4 0.004652 0.992774 0.65377 0.0 NaN
2018-01-03 0.0 0.000000 0.992774 0.65377 0.0 NaN
2018-01-04 0.0 0.000000 0.992774 0.65377 1.0 0.33456
2018-01-05 0.4 0.004652 0.992774 0.65377 0.0 NaN
... ... ... ... ... ...
“条件”列用于在最后一列中的特定时间属性值
最后一列中的缺失值应使用第 1 到第 4 列中的数据计算,使用第 1 到第 4 列中的前 DOY 值以及我必须计算的值的同一列中的值。
此外,如果特定 DOY 中已经存在值,则应重置公式以使用先前添加的值开始计算。
我不确定如何将其放入循环中以执行操作,或者是否有其他替代方法来解决我正在处理的这部分代码。
【问题讨论】:
-
我不确定我是否完全理解了这个问题。了解最后一列计算所需的算法会很有帮助。看起来你需要这样的东西:对于索引,df.iterrows() 中的行: start_row = index - n end_row = inde - m other_rows = df.loc[start_row:end_row] compute_last_column(row, other_rows)
-
@Cr4zyTun4 这实际上不是一个算法,它只是一个评估土壤侵蚀(特别是土壤粗糙度)的公式。计算比较棘手,因为机械操作会影响每日值,这些值受前一天参数的影响,所以计算应该类似于
value at day x = col1(x-1)*col2(x-1)-col3(x-1)*col4(x-1) -
好吧,你了解 iterrow() 方法还是需要我写一些代码?
-
我会寻求您的帮助,因为我不完全确定我理解 iterrows() 的工作原理
-
可能会正常计算每一天,然后使用
shift()将所有值向下移动一行以将结果放在下一个日期。
标签: python pandas dataframe loops pandas-loc