【发布时间】:2015-04-02 19:54:18
【问题描述】:
我没有在其他地方找到答案,所以我需要问一下。可能是因为我不知道如何正确命名它。 (英语不是我的母语)
我有很大的日期时间数据框。时间在这里很重要。 df 中的一列具有值 [Nan, 1, -1]。当值发生变化时,我需要执行快速计算以重置累积和。
示例。
Time sign desire_value
2014-01-24 05:00:00 Nan Nan
2014-01-24 06:00:00 Nan Nan
2014-01-24 07:00:00 Nan Nan
2014-01-24 08:00:00 1 1
2014-01-24 09:00:00 1 2
2014-01-24 10:00:00 1 3
2014-01-24 11:00:00 -1 1
2014-01-24 12:00:00 -1 2
2014-01-24 13:00:00 -1 3
2014-01-24 14:00:00 -1 4
2014-01-24 15:00:00 -1 5
2014-01-24 16:00:00 1 1
2014-01-24 17:00:00 1 2
2014-01-24 18:00:00 1 3
2014-01-24 19:00:00 -1 1
2014-01-24 20:00:00 -1 2
2014-01-24 21:00:00 1 1
2014-01-24 22:00:00 1 2
我有使用函数的工作解决方案,但效率不高。
df['sign_1'] = df['sign'].shift(1)
for index, row in df.iterrows():
if row.sign is None:
df.loc[line, 'desire_value'] = None
elif row.sign == row.sign_1:
acc += 1
df.loc[index, 'desire_value'] = acc
else:
acc = 1
df.loc[index, 'desire_value'] = acc
我找不到任何基于数组的方法。我发现在 Python 中高效迭代的最佳方法是使用 Cython,但是否有更多“Python”方法来解决这个问题?
【问题讨论】: