python - 使用 Pandas 每小时用特定列中的先前值填充每组缺失的日期

标签 python pandas dataframe date

我有以下数据框(示例):

import pandas as pd

data = [['A', '2022-09-01 10:00:00', False, 2], ['A', '2022-09-01 14:00:00', False, 3],
        ['B', '2022-09-01 13:00:00', False, 1], ['B', '2022-09-01 16:00:00', True, 4]]
df = pd.DataFrame(data = data, columns = ['group', 'date', 'indicator', 'value'])

  group                 date  indicator  value
0     A  2022-09-01 10:00:00      False      2
1     A  2022-09-01 14:00:00      False      3
2     B  2022-09-01 13:00:00      False      1
3     B  2022-09-01 16:00:00       True      4

我想每小时填写日期之间缺失的日期。因此,日期之间缺少的每个小时都应该被填充,并且值应该与以前的数据相同。这是所需的输出:

data = [['A', '2022-09-01 10:00:00', False, 2], ['A', '2022-09-01 11:00:00', False, 2], 
        ['A', '2022-09-01 12:00:00', False, 2], ['A', '2022-09-01 13:00:00', False, 2], 
        ['A', '2022-09-01 14:00:00', False, 3],
        ['B', '2022-09-01 13:00:00', False, 1], ['B', '2022-09-01 14:00:00', False, 1],
        ['B', '2022-09-01 15:00:00', False, 1], ['B', '2022-09-01 16:00:00', True, 4]]
df_desired = pd.DataFrame(data = data, columns = ['group', 'date', 'indicator', 'value'])

  group                 date  indicator  value
0     A  2022-09-01 10:00:00      False      2
1     A  2022-09-01 11:00:00      False      2
2     A  2022-09-01 12:00:00      False      2
3     A  2022-09-01 13:00:00      False      2
4     A  2022-09-01 14:00:00      False      3
5     B  2022-09-01 13:00:00      False      1
6     B  2022-09-01 14:00:00      False      1
7     B  2022-09-01 15:00:00      False      1
8     B  2022-09-01 16:00:00       True      4

所以我想知道是否可以使用 Pandas 每小时用列值中的先前值填充每组缺失的日期?

最佳答案

还有一个办法

df['date']=pd.to_datetime(df['date'])

df2=(df.set_index('date' )
     .groupby('group',  group_keys=False)
     .apply(lambda x: x.resample('1H').ffill()) 
     .reset_index() )
df2
                   date     group   indicator   value
0   2022-09-01 10:00:00        A    False       2
1   2022-09-01 11:00:00        A    False       2
2   2022-09-01 12:00:00        A    False       2
3   2022-09-01 13:00:00        A    False       2
4   2022-09-01 14:00:00        A    False       3
5   2022-09-01 13:00:00        B    False       1
6   2022-09-01 14:00:00        B    False       1
7   2022-09-01 15:00:00        B    False       1
8   2022-09-01 16:00:00        B    True        4

关于python - 使用 Pandas 每小时用特定列中的先前值填充每组缺失的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74182891/

相关文章:

java - 摸索蒂姆索特

python - 生成 'K' 数据点的最近邻

基于多列重新编码数据框列

r - 将列表中的所有矩阵转换为 R 中的 data.frames

python - lxml XPath 匹配 Python 中的值

python - RollingGroupby 上的 Pandas 聚合方法

python - 使用诗歌安装的软件包在 `poetry shell` 内不可用

python - 将 pandas df 列数据转置为行

python-3.x - Pandas 动态堆栈

dataframe - Spark Scala Cassandra 连接器删除所有所有行失败,IllegalArgumentException 要求失败异常