根据时间段+另一列的条件,得出一列的均值

时间:2019-09-06 12:47:16

标签: python pandas dataframe timestamp

我相信我的问题确实很简单,并且必须有一种非常简单的方法来解决此问题,但是由于我是Python的新手,所以我无法自己解决它。

我将此数据框作为我所面临问题的一​​个简单示例。我需要的是每10分钟计算一次所考虑点的平均速度,这些平均速度由“状态”列表示,考虑1而不考虑0。因此,我希望创建一个数据框,其中每10分钟包含6个均值,但是均值仅与所考虑的点有关。

            Timestamp      Category  ...      Status           Quantity
0     2013-08-14 22:00:00         1  ...          1               1
1     2013-08-14 22:00:01         1  ...          1               1
2     2013-08-14 22:00:02         1  ...          0               1.1
3     2013-08-14 22:00:03         1  ...          1               1.2
4     2013-08-14 22:00:04         1  ...          1               1.2
5     2013-08-14 22:00:05         1  ...          0               1.2
6     2013-08-14 22:00:06         1  ...          1               1.2
7     2013-08-14 22:00:07         1  ...          0               1.2
8     2013-08-14 22:00:08         1  ...          1               1.2

35999 2013-08-23 22:59:59         0  ...          1               2.3

希望我能做到简洁明了。非常感谢您在此方面的帮助!

1 个答案:

答案 0 :(得分:1)

我认为您首先需要通过DataFrame.queryboolean indexing进行过滤,然后通过mean的{​​{3}}进行重采样:

df['Timestamp'] = pd.to_datetime(df['Timestamp'])

df1=df.query("Status==1").resample('10Min',on='Timestamp')['Quantity'].mean().reset_index()
print (df1)
               Timestamp  Quantity
0    2013-08-14 22:00:00  1.133333
1    2013-08-14 22:10:00       NaN
2    2013-08-14 22:20:00       NaN
3    2013-08-14 22:30:00       NaN
4    2013-08-14 22:40:00       NaN
                 ...       ...
1297 2013-08-23 22:10:00       NaN
1298 2013-08-23 22:20:00       NaN
1299 2013-08-23 22:30:00       NaN
1300 2013-08-23 22:40:00       NaN
1301 2013-08-23 22:50:00  2.300000

[1302 rows x 2 columns]

类似:

df1 = df[df["Status"] == 1].resample('10Min', on='Timestamp')['Quantity'].mean()