gpt4 book ai didi

python - 为每个客户查找日期时间的缺失值

转载 作者:太空狗 更新时间:2023-10-30 01:18:09 26 4
gpt4 key购买 nike

    CustID  UsageDate               EnergyConsumed
0 17111 2018-01-01 00:00:00 1.095
1 17111 2018-01-01 01:00:00 1.129
2 17111 2018-01-01 02:00:00 1.165
3 17111 2018-01-01 03:00:00 1.833
4 17111 2018-01-01 04:00:00 1.697
5 17111 2018-01-01 05:00:00 1.835
missing data point 1
6 17111 2018-01-01 07:00:00 1.835
7 17112 2018-01-01 00:00:00 1.095
8 17112 2018-01-01 01:00:00 1.129
missing data point 1
9 17112 2018-01-01 03:00:00 1.833
10 17112 2018-01-01 04:00:00 1.697
11 17112 2018-01-01 05:00:00 1.835

对于每个客户,我都有每小时的数据。但是,两者之间缺少一些数据点。我想检查使用日期的最小值和最大值,并在该时间间隔内填写缺少的使用日期(所有值均为每小时),并将 EnergyConsumed 填为零。稍后我可以使用 ffill 或 backfill 来处理这个问题。

并非每个客户的最大使用日期都是 2018-01-31 23:00:00。所以我们只想将系列延长到每个客户的最大日期。

缺失点1被替换为

17111        2018-01-01 06:00:00     0

缺失点 2 替换为

17112        2018-01-01 02:00:00     0

我的主要问题是如何找到每个客户的最小和最大日期,然后生成日期间隔。

我尝试过按日期索引和重新采样,但没有帮助我找到解决方案。

此外,我想知道是否有一种方法可以直接找到在上述模式中具有缺失值的客户 ID。我的数据非常大,@Vaishali 提供的解决方案计算量很大。任何输入都会有所帮助!

最佳答案

您可以按 custid 对 Dataframe 进行分组,并创建具有所需日期范围的索引。现在使用这个索引重新索引数据

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

idx = df.groupby('CustID')['UsageDate'].apply(lambda x: pd.Series(index = pd.date_range(x.min(), x.max(), freq = 'H'))).index

df.set_index(['CustID', 'UsageDate']).reindex(idx).fillna(0).reset_index().rename(columns = {'level_1':'UsageDate'})

CustID UsageDate EnergyConsumed
0 17111 2018-01-01 00:00:00 1.095
1 17111 2018-01-01 01:00:00 1.129
2 17111 2018-01-01 02:00:00 1.165
3 17111 2018-01-01 03:00:00 1.833
4 17111 2018-01-01 04:00:00 1.697
5 17111 2018-01-01 05:00:00 1.835
6 17111 2018-01-01 06:00:00 0.000
7 17111 2018-01-01 07:00:00 1.835
8 17112 2018-01-01 00:00:00 1.095
9 17112 2018-01-01 01:00:00 1.129
10 17112 2018-01-01 02:00:00 0.000
11 17112 2018-01-01 03:00:00 1.833
12 17112 2018-01-01 04:00:00 1.697
13 17112 2018-01-01 05:00:00 1.835

说明:由于使用日期必须是该 CustID 的最小和最大日期范围内的所有日期,我们按 CustID 对数据进行分组,并使用 date_range 创建一系列最小和最大日期。将日期设置为系列的索引而不是值。 groupby 的结果将是一个多重索引,其中 CUSTID 为级别 0,使用日期为级别 1。我们现在使用这个多重索引来重新索引原始数据帧。它将使用索引匹配的值,在其余部分分配 NaN 。最后使用 fillna 将 NaN 转换为 0。

关于python - 为每个客户查找日期时间的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54564494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com