大佬教程收集整理的这篇文章主要介绍了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,请注明来意。