我有一个数据帧与日期时间类型列和浮点类型列。熊猫:日期时间的复杂条件
date value 0 2010-01-01 01:23:00 21.2 1 2010-01-02 01:33:00 63.4 2 2010-01-03 06:02:00 80.6 3 2010-01-04 06:05:00 50.1 4 2010-01-05 06:20:00 346.5 5 2010-01-06 07:44:00 111.8 6 2010-01-07 08:00:00 113.1 7 2010-01-08 08:22:00 10.6 8 2010-01-09 09:00:00 287.2 9 2010-01-10 09:14:00 1652.6
我想创建一个新列当前迭代行时间之前记录的一个小时平均值。
[UPDATE]实施例:
如果当前迭代4 2010-01-05 06:20:00 346.5
,我需要计算(50.1 + 80.6)/2
(在范围2010-01-05 05:20:00~2010-01-05 06:20:00
值,并计算平均值)。
date value before_1hr_mean 4 2010-01-05 06:20:00 346.5 65.35
我用iterrows()
来解决这个问题,如下面的代码。但这种方法很慢,通常不是在大熊猫推荐功能iterrows()
和该行将会变得
[更新]
df['before_1hr_mean'] = np.nan
for index, row in df.iterrows():
df.loc[index, 'before_1hr_mean'] = df[(df['date'] < row['date']) & \
(df['date'] >= row['date'] - pd.Timedelta(hours=1))]['value'].mean()
有没有更好的方式来处理这种情况呢?
您是否意识到您的示例会在几天内递增......这意味着结果与原始数据完全相同。在这个例子中,我们采用了一行的平均值。 – piRSquared
此外,你的代码表示'df ['date'] <= row ['date']'意味着你想在当前行的值中包含当前行的值。但是您的示例计算中,您排除了当前行的值。这也意味着你的第一行的计算将为空。 – piRSquared
对不起,我的错误代码。我把等号放在错误的位置上。从你的代码中学到很多东西,在这种情况下,null或者Nan是可以的。 – zue