当前位置: 首页 > 知识库问答 >
问题:

仅针对特定列中的特定条件值,使用以前的值按组每小时填充缺失的日期

毋修为
2023-03-14

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

import pandas as pd

data = [['A', '2022-09-01 10:00:00', False, 2], ['A', '2022-09-01 12:00:00', True, 3], ['A', '2022-09-01 14:00:00', False, 1], 
        ['B', '2022-09-01 13:00:00', False, 1], ['B', '2022-09-01 16:00:00', True, 4], ['B', '2022-09-01 18:00:00', False, 3]]
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 12:00:00       True      3
2     A  2022-09-01 14:00:00      False      1
3     B  2022-09-01 13:00:00      False      1
4     B  2022-09-01 16:00:00       True      4
5     B  2022-09-01 18:00:00      False      3

我想每组每小时填写缺失的日期,其中值与前一个现有行相同。当前一个现有行的指示符为真时,我想用False而不是真的指示符填充这些缺失的行,但值虽然相同。这是所需的输出:

    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', True, 3], ['A', '2022-09-01 13:00:00', False, 3], ['A', '2022-09-01 14:00:00', False, 1], 
            ['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], ['B', '2022-09-01 17:00:00', False, 4], ['B', '2022-09-01 18:00:00', False, 3]]
    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       True      3
3      A  2022-09-01 13:00:00      False      3
4      A  2022-09-01 14:00:00      False      1
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
9      B  2022-09-01 17:00:00      False      4
10     B  2022-09-01 18:00:00      False      3

如您所见,每个组每小时填写一次日期,当上一个指标为True时,指标变为False。

所以我想知道是否有人知道如何每组每小时填写这些缺失的日期,并使用熊猫注意指标何时为真?

共有1个答案

袁弘方
2023-03-14

首先使用<code>DataFrame创建<code>DatetimeIndex</code>。set_index,然后在lambda函数中通过DataFrame添加缺少的小时数。asfreq,最后用系列替换缺少的值。fillna和向前填充缺少的值:

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

df = (df.set_index('date')
        .groupby('group')[['indicator', 'value']]
        .apply(lambda x: x.asfreq('H'))
        .assign(indicator = lambda x: x['indicator'].fillna(False), 
                value = lambda x: x['value'].ffill())
        .reset_index())
print (df)
   group                date  indicator  value
0      A 2022-09-01 10:00:00      False    2.0
1      A 2022-09-01 11:00:00      False    2.0
2      A 2022-09-01 12:00:00       True    3.0
3      A 2022-09-01 13:00:00      False    3.0
4      A 2022-09-01 14:00:00      False    1.0
5      B 2022-09-01 13:00:00      False    1.0
6      B 2022-09-01 14:00:00      False    1.0
7      B 2022-09-01 15:00:00      False    1.0
8      B 2022-09-01 16:00:00       True    4.0
9      B 2022-09-01 17:00:00      False    4.0
10     B 2022-09-01 18:00:00      False    3.0
 类似资料:
  • 我有以下数据帧(示例): 我想在每小时的日期之间填写缺失的日期。因此,应填写日期之间缺少的每一小时,并且值应与之前的数据相同。以下是所需的输出: 所以我想知道是否可以使用每组每小时用列值中的前一个值填充缺失的日期?

  • 问题内容: 我正在将Primefaces 3.2与JSF 2.0一起使用。 我正在使用 而对于ajaxStatus: 我在同一页面上还有很多其他primefaces组件,但是我只希望在按下此特定按钮时呈现p:ajaxStatus。有什么好的解决办法吗?ajaxStatus在每个ajax事件上呈现。 问题答案: 如果您有少量按钮,则可以对其进行设置,然后在不进行此设置的情况下保留所需的按钮。 这样,

  • 问题内容: 这应该很简单,但是我发现的最接近的内容是这篇文章: pandas:填充组中的缺失值,但我仍然无法解决我的问题。 假设我有以下数据框 我想在每个“名称”组中用平均值填写,即 我不确定要去哪里: 问题答案: 一种方法是使用:

  • 我有以下示例数据框架: 我只想替换前两列中的空值——列“a”和“b”: 这是创建示例数据帧的代码: 我知道如何使用替换所有空值: 当我尝试这样做时,我失去了第三列:

  • 我有一个缺少“SNAP_ID”值的数据帧。我想根据前一个非缺失值(lag()?)的序列,用浮点值填充缺失值。如果可能的话,我真的想只用dplyr来实现这一点。 假设: 永远不会有丢失的数据,因为第一行或最后一行我根据数据集的最小值和最大值之间的缺失天数生成缺失的日期 数据集中可能存在多个空白 当前数据: 我想要实现的目标: 作为数据帧: 这是我实现这个目标的尝试,但它只适用于第一个缺失的值: 来自

  • 我有以下数据帧(示例): 我想用每组前一天的值来填写缺失的日期。我可以使用这个答案中的代码,但问题是我可能在每个组中都有重复的条目(日期)。返回以下错误: 我想要的输出应如下所示: 一些日期解释说: A组缺少日期“2022-09-03”和“2022-09-05”。如您所见,这些值来自上一个日期 B组缺少日期“2022-09-02”、“2022-09-06”和“2022-009-09”。对于这些,它