2

我有一些及时测量的事件数据,所以数据格式看起来像

Time(s)    Pressure    Humidity
0             10            5 
0             9.9           5.1
0             10.1          5
1             10            4.9
2             11            6

这里的第一列是自实验开始以来经过的时间,以秒为单位。其他两列是一些观察。当某些条件为真时会创建一行,这些条件超出了这里讨论的范围。用分号分隔的每组 3 个数字是一行数据。由于这里的最低时间分辨率只有几秒钟,因此您可以有两行具有相同的时间戳,但会有不同的观察结果。基本上这是两个不同的事件,时间无法区分。

现在我的问题是通过每 10 秒或 100 秒或 1000 秒对其进行二次抽样来汇总数据系列。所以我想要一个从原始更高粒度数据系列中提取的数据系列。有几种方法可以决定您将使用哪一行,例如,假设您每 10 秒进行一次二次采样,当 10 秒过去时,您可能会有多行,时间戳为 10 秒。你可以采取

1) first row
2) mean of all rows with the same timestamp of 10
3) some other technique

我希望在熊猫中做到这一点,任何想法或开始的方式将不胜感激。谢谢。

4

1 回答 1

1

这是一个简单的示例,展示了如何执行 pandas 请求的操作。

一种是使用数据分箱对样本进行分组并重新采样数据。

import pandas as pd

# Creation of the dataframe
df = pd.DataFrame({\
'Time(s)':[0 ,0 ,0 ,1 ,2],\
'Pressure':[10, 9.9, 10.1, 10, 11],\
'Humidity':[5 ,5.1 ,5 ,4.9 ,6]})

# Select time increment
delta_t = 1

timeCol = 'Time(s)'
# Creation of the time sampling
v = xrange(df[timeCol].min()-delta_t,df[timeCol].max()+delta_t,delta_t)
# Pandas magic instructions with cut and groupby
df_binned = df.groupby(pd.cut(df[timeCol],v))
# Display the first element
dfFirst = df_binned.head(1)
# Evaluate the mean of each group
dfMean = df_binned.mean()
# Evaluate the median of each group
dfMedian = df_binned.median()
# Find the max of each group
dfMax = df_binned.max()
# Find the min of each group
dfMin = df_binned.min()

结果将如下所示dfFirst

           Humidity  Pressure  Time(s)
Time(s)
(-1, 0] 0       5.0        10        0
(0, 1]  3       4.9        10        1
(1, 2]  4       6.0        11        2    

结果将如下所示dfMean

         Humidity  Pressure  Time(s)
Time(s)
(-1, 0]  5.033333        10        0
(0, 1]   4.900000        10        1
(1, 2]   6.000000        11        2 
于 2014-05-02T21:46:56.130 回答