因此,我正在处理刻度数据,并尝试将数据帧重新采样为分钟柱,但是当调用重新采样时,时间序列开始并结束刻度存在的第一个实例。我如何重新采样这些数据,以便可以将第一次和最后一次指定为特定的开始和结束时间?
此处编辑一些示例数据。
df = pd.DataFrame(data={'Code': pd.Series(['A', 'A', 'B', 'B'], dtype='str'), 'Timestamp': pd.Series([1608627600073933, 1698929600124359, 1608627600073933, 1608929600124359], dtype='datetime64[ns]'),
'Val':[5, 6, 5, 6]})
df.set_index(['Timestamp'], inplace=True)
df.groupby('Code').resample('1T').agg('sum')
哪些输出
Val
Timestamp
1970-01-19 14:50:00 5
1970-01-19 14:51:00 0
1970-01-19 14:52:00 0
1970-01-19 14:53:00 0
1970-01-19 14:54:00 0
1970-01-19 14:55:00 6
但我想要一个输出数据帧,其中包含例如特定小时的每一分钟的时间戳。
最佳答案
您可以手动添加开始和结束日期时间:
#removed minutes and seconds
df1 = df.rename(lambda x: x.floor('H'))
#removed duplicated DatetimeIndex - output empty df
df1 = df1.loc[~df1.index.duplicated(), []]
#join together
df1 = pd.concat([df, df1, df1.rename(lambda x: x + pd.Timedelta('00:59:00'))])
print (df1)
Code Val
Timestamp
1970-01-19 14:50:27.600073933 A 5.0
1970-01-19 14:55:29.600124359 A 6.0
1970-01-19 14:00:00.000000000 NaN NaN
1970-01-19 14:59:00.000000000 NaN NaN
df2 = df1.resample('1T').agg('sum')
print (df2)
对于每天的增值:
df1 = df.rename(lambda x: x.floor('D'))
df1 = df1.loc[~df1.index.duplicated(), []]
df1 = pd.concat([df, df1, df1.rename(lambda x: x + pd.Timedelta('23:59:00'))])
print (df1)
Code Val
Timestamp
1970-01-19 14:50:27.600073933 A 5.0
1970-01-19 14:55:29.600124359 A 6.0
1970-01-19 00:00:00.000000000 NaN NaN
1970-01-19 23:59:00.000000000 NaN NaN
df2 = df1.resample('1T').agg('sum')
print (df2)
关于python - 如何对数据帧重新采样并包括开始和结束时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70859529/