程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了DataFrame 根据时间间隔组织数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决DataFrame 根据时间间隔组织数据?

开发过程中遇到DataFrame 根据时间间隔组织数据的问题如何解决?下面主要结合日常开发的经验,给出你关于DataFrame 根据时间间隔组织数据的解决方法建议,希望对你解决DataFrame 根据时间间隔组织数据有所启发或帮助;

我有一个带有时间戳数据的 DataFrame,如下所示

             Date      Time  name   Value
0        20210322  08:00:00     A       1 
1        20210322  08:00:00     B       2  
2        20210322  08:28:00     A       3  
3        20210322  08:30:00     B       4  
4        20210322  09:00:00     A       5  
5        20210322  09:30:00     B       6  
6        20210322  09:55:00     A       7  
7        20210322  10:30:00     B       8  
8        20210322  10:30:00     A       9  
9        20210322  11:58:00     A      10  
10       20210322  12:00:00     B      11
...

时间序列每 30 秒有一个值,但没有在每个时间戳指定每个名称

但最终目标是将它与另一个 dataFrame name datetiR_243_11845@e 合并

name                 datetiR_243_11845@e  
   A      2021-03-22 08:00:00 
   B      2021-03-22 09:25:15  
   A      2021-03-22 09:30:00
   A      2021-03-22 10:30:00
...

并填充 +1h、+2h 等列,其中 +1h 包含时间戳 datetiR_243_11845@e +1h 处的第一个 DataFrame 的值。如果在指定的时间戳无法获得精确的数据,理想的做法是使用第一个下一个可用的数据

name                 datetiR_243_11845@e    +0h   +1h   +2h  +3h  ....
   A      2021-03-22 08:00:00      1     5     7    9  
   B      2021-03-22 09:25:15      6     8    11   NA  
   A      2021-03-22 09:30:00      7     9    10   NA    
   A      2021-03-22 10:30:00      9    10    NA   NA
...

有熊猫的方法来做这种把戏吗?

如果我不够清楚,请不要犹豫,要求精确。如果您对这篇文章的标题有更好的建议,请分享,我不知道当前的是否足够准确。

提前致谢 伊皮

解决方法

我认为您首先需要 @H_886_5@merge_asof:

df1['datetiR_243_11845@e'] = pd.to_datetiR_243_11845@e(df1['datetiR_243_11845@e'])
#convert to datetiR_243_11845@es
df['datetiR_243_11845@e1'] = pd.to_datetiR_243_11845@e(df['Date'].astype(str) + ' ' + df['Time'])


df = pd.merge_asof(df,df1,left_on='datetiR_243_11845@e1',right_on='datetiR_243_11845@e',by='Name')
print (df)
        Date      Time Name  Value           datetiR_243_11845@e1            datetiR_243_11845@e
0   20210322  08:00:00    A      1 2021-03-22 08:00:00 2021-03-22 08:00:00
1   20210322  08:00:00    B      2 2021-03-22 08:00:00                 NaT
2   20210322  08:28:00    A      3 2021-03-22 08:28:00 2021-03-22 08:00:00
3   20210322  08:30:00    B      4 2021-03-22 08:30:00                 NaT
4   20210322  09:00:00    A      5 2021-03-22 09:00:00 2021-03-22 08:00:00
5   20210322  09:30:00    B      6 2021-03-22 09:30:00 2021-03-22 09:25:15
6   20210322  09:55:00    A      7 2021-03-22 09:55:00 2021-03-22 09:30:00
7   20210322  10:30:00    B      8 2021-03-22 10:30:00 2021-03-22 09:25:15
8   20210322  10:30:00    A      9 2021-03-22 10:30:00 2021-03-22 10:30:00
9   20210322  11:58:00    A     10 2021-03-22 11:58:00 2021-03-22 10:30:00
10  20210322  12:00:00    B     11 2021-03-22 12:00:00 2021-03-22 09:25:15

# #subtract hours and floor,convert to Integers
df['hour'] = (df['datetiR_243_11845@e1'].sub(df['datetiR_243_11845@e']).dt.floor('H')
                            .dt.@R_986_10586@l_seconds()
                            .div(3600)
                            # .astype(int)
                            )

#pivoTing with sum,rename columns names and cumualtive sum per rows
f = lambda x: f'+{x}h'
df = (df.pivot_table(index=['Name','datetiR_243_11845@e'],columns='hour',values='Value',aggfunc='sum',fill_value=0)
          .rename(columns=f))
print (df)
hour                      +0.0h  +1.0h  +2.0h
Name datetiR_243_11845@e                                
A    2021-03-22 08:00:00      4      5      0
     2021-03-22 09:30:00      7      0      0
     2021-03-22 10:30:00      9     10      0
B    2021-03-22 09:25:15      6      8     11

大佬总结

以上是大佬教程为你收集整理的DataFrame 根据时间间隔组织数据全部内容,希望文章能够帮你解决DataFrame 根据时间间隔组织数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:DataFrame