如何根据日期时间创建熊猫数据帧段的摘要?

时间:2021-05-13 15:07:23

标签: python pandas datetime time-series data-manipulation

我有以下数据帧结构:

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 的日期时间列到达 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 的 X1 和 X2 的最后一个有效测量值: 00. new_df 的第二行包含从日期时间 2021-02-25 01:00:00 到 2021-02-26 00:00 的 X1 和 X2 的最后一个有效测量值: 00 等等...

我已经为问题的各个步骤寻找了解决方案,例如:

-如何获取最后一个有效索引 Locate first and last non NaN values in a Pandas DataFrame

-如何获取特定列的索引 Python Pandas: Get index of rows which column matches certain value

但我对问题的整体逻辑感到很困惑。

0 个答案:

没有答案