将数据帧按特定列压缩到包含第一个和最后一个时间戳以及值的平均值的行

2024-04-25 17:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经标记了按时间戳排序的数据组,我希望将其缩减为起始时间戳和最后一个时间戳,并获得该组中与该标记相对应的值的平均值。起始数据帧示例:

          timestamp          value      mark
1   2016-11-07 11:00:00       0.781726     1  
2   2016-11-07 11:03:00       0.812757     2  
3   2016-11-07 11:05:00       0.845348     2  
4   2016-11-07 11:07:00       0.817394     2  
5   2016-11-07 11:11:00       0.760787     1  
6   2016-11-07 11:13:00       0.807892     1 
7   2016-11-07 11:15:00       0.812965     1  
8   2016-11-07 11:18:00       0.822001     1 

我想要达到的目标:

^{pr2}$

你知道最好的办法吗?我应该先给每一批打上唯一的标记吗?在


Tags: 数据标记示例目标排序value时间timestamp
1条回答
网友
1楼 · 发布于 2024-04-25 17:15:53

您需要从重复列markSeries的唯一groups,然后是^{}^{}^{}和{a5}:

print ((df.mark != df.mark.shift()).cumsum())
1    1
2    2
3    2
4    2
5    3
6    3
7    3
8    3
Name: mark, dtype: int32

df1 = df.groupby((df.mark != df.mark.shift()).cumsum()) \
         .agg({'timestamp': ['first','last'], 'value':'mean', 'mark': 'first'})

#reset MultiIndex in columns
df1.columns = ['_'.join(col) for col in df1.columns]
#if necessary rename columns
df1 = df1.rename(columns=({'timestamp_first':'start_timestamp', 
                           'timestamp_last':'end_timestamp',
                           'mark_first':'mark','value_mean':'(mean_)value'})) \
          .rename_axis(None)

print (df1)         
      start_timestamp       end_timestamp  mark  (mean_)value
1 2016-11-07 11:00:00 2016-11-07 11:00:00     1      0.781726
2 2016-11-07 11:03:00 2016-11-07 11:07:00     2      0.825166
3 2016-11-07 11:11:00 2016-11-07 11:18:00     1      0.800911

相关问题 更多 >