python - 如何根据日期时间创建熊猫数据框段的摘要?
问题描述
我有以下数据框结构:
import pandas as pd
import numpy as np
np.random.seed(0)
rng = pd.date_range('2021-02-24', periods=74, freq='H')
df = pd.DataFrame({ 'datetime': rng, 'X1': np.random.randn(len(rng)), 'X2': np.nan })
df.X2.iloc[15] = 115
df.X2.iloc[3] = 130
df.X2.iloc[69] = 138
df.X2.iloc[31] = 221
df
datetime X1 X2
0 2021-02-24 00:00:00 1.76 NaN
1 2021-02-24 01:00:00 0.40 NaN
2 2021-02-24 02:00:00 0.98 NaN
3 2021-02-24 03:00:00 2.24 130.00
4 2021-02-24 04:00:00 1.87 NaN
.. ... ... ...
69 2021-02-26 21:00:00 0.05 138.00
70 2021-02-26 22:00:00 0.73 NaN
71 2021-02-26 23:00:00 0.13 NaN
72 2021-02-27 00:00:00 1.14 NaN
73 2021-02-27 01:00:00 -1.23 NaN
[74 rows x 3 columns]
我想创建一个新的数据框 df_new,其中每次 df 的 datetime 列到达 tms 00:00:00 时都有一行。对于 df 中的每一列,new_df 的相应列必须包含前 24 小时内最后一个非 nan 值,如下所示:
df_new = pd.DataFrame({ 'last_valid_X1': [-0.742165,0.77749,0.128983], 'last_valid_X2': [115,221,138] })
df_new
last_valid_X1 last_valid_X2
0 -0.74 115
1 0.78 221
2 0.13 138
由于有 3 天的观察,因此有 3 行(为方便起见,不包括 00:00:00 的第一个时间戳)。new_df 的第一行包含从日期时间 2021-02-24 01:00:00 到 2021-02-25 00:00:00 的 X1 和 X2 的最后一个有效测量值。new_df 的第二行包含从日期时间 2021-02-25 01:00:00 到 2021-02-26 00:00:00 等 X1 和 X2 的最后一个有效测量值...
我已经搜索了问题的各个步骤的解决方案,例如:
- 如何获取最后一个有效索引在 Pandas DataFrame 中定位第一个和最后一个非 NaN 值
- 如何获取特定列的索引 Python Pandas:获取与某个值匹配的行的索引
但我对问题的整体逻辑感到非常困惑。
解决方案
推荐阅读
- javascript - 'SyntaxError: Invalid shorthand property initializer' 使用正则表达式时
- pandas - 从以有序字典为行的系列创建熊猫数据框
- python - Tkinter ScrolledText,将光标移动到给定行时如何自动更新滚动条?
- generics - 如何在 rust 中正确设置通用集合类型
- python - 安装包含二进制文件的轮子时出现问题
- javascript - 从 Chrome 中的 window.addEventListener('error') 获取回溯?
- python - 求输入数字相乘的结果
- angular - 角度测试,有没有更好的方法来编写这段代码?
- css - 如何在悬停超链接上设置图像旋转
- swift - 如何将 UIActivityViewController 与 SwiftUI 的 ScrollView 集成?