gpt4 book ai didi

python - 根据时间列计算日期列中的值

转载 作者:行者123 更新时间:2023-12-04 02:26:18 24 4
gpt4 key购买 nike

我有一个如下所示的数据框:

**date**              **time**            **price**
NaN 1103 5
NaN 0010 10
NaN 0100 6
NaN 0201 8
NaN 0015 7
12.03.2020 0400 4
NaN 0500 6
NaN 0800 3
NaN 1000 4
NaN 1140 5
12.03.2020 1200 2
NaN 0030 1
NaN 0112 0

我想通过时间字段计算日期来填充日期列中的NaN值。我的想法是在日期列中找到第一个非空值。一旦我有了它,我想要 bfill() 和 ffill() 的方式是在午夜前后的时间测量中更改日期。因此,在我们的示例中,来自第一个非空单元格的 bfill() 之后的数据将如下所示:

     **date**              **time**            **price**
10.03.2020 1103 5
11.03.2020 0010 10
11.03.2020 0100 6
11.03.2020 0201 8
12.03.2020 0015 7
12.03.2020 0400 4
NaN 0500 6
NaN 0800 3
NaN 1000 4
NaN 1140 5
12.03.2020 1200 2
NaN 0030 1
NaN 0112 0

这是从第一个非空日期值开始处理 ffil() 的方式:

          **date**             **time**            **price**
10.03.2020 1103 5
11.03.2020 0010 10
11.03.2020 0100 6
11.03.2020 0201 8
12.03.2020 0015 7
12.03.2020 0400 4
12.03.2020 0500 6
12.03.2020 0800 3
12.03.2020 1000 4
12.03.2020 1140 5
12.03.2020 1200 2
13.03.2020 0030 1
13.03.2020 0112 0

值得注意的是,第一个非空值可以出现在日期列的任何地方。将不胜感激解决此问题的一些帮助。谢谢

date = [NaN,NaN,NaN,NaN,NaN,"12.03.2020", NaN,NaN,NaN,NaN, "12.03.2020", NaN, NaN}
time = [1103,0010,0100,0201,0015,0400,0500,0800,1000,1140,1200,0030,0112]
price= [5,10,6,8,7,4,6,3,4,5,2,1,0]

编辑:添加列表

最佳答案

迭代 Shubham's DateOffset idea , 这是一个计算相对于某个已知日期的偏移量并将偏移量应用为 Timedelta 的版本:

df.date = pd.to_datetime(df.date, dayfirst=True)
df.time = pd.to_datetime(df.time, format='%H%M').dt.time
offset = df.time.shift().bfill().gt(df.time).cumsum()

known = df.date.notnull().idxmax()
offset -= offset.loc[known]

df.date = df.date.loc[known] + pd.to_timedelta(offset, unit='d')

详情

  1. 根据 time 大于后续 time 的时间计算偏移量:
df.date = pd.to_datetime(df.date, dayfirst=True)
df.time = pd.to_datetime(df.time, format='%H%M').dt.time
offset = df.time.shift().bfill().gt(df.time).cumsum()

# array([0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3])
  1. 找到一个 known 日期用作偏移量的轴心点(这里我使用第一个非空日期),其中 known 日期的偏移量为 0,其他偏移量相对于已知:
known = df.date.notnull().idxmax()
offset -= offset.loc[known]

# array([-2, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 1])
  1. 转换偏移量 to_timedelta()并将它们添加到 known 日期:
df.date = df.date.loc[known] + pd.to_timedelta(offset, unit='d')

# date time value
# 0 2020-03-10 11:03:00 5
# 1 2020-03-11 00:10:00 10
# 2 2020-03-11 01:00:00 6
# 3 2020-03-11 02:01:00 8
# 4 2020-03-12 00:15:00 7
# 5 2020-03-12 04:00:00 4
# 6 2020-03-12 05:00:00 6
# 7 2020-03-12 08:00:00 3
# 8 2020-03-12 10:00:00 4
# 9 2020-03-12 11:40:00 5
# 10 2020-03-12 12:00:00 2
# 11 2020-03-13 00:30:00 1
# 12 2020-03-13 01:12:00 0

关于python - 根据时间列计算日期列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67363274/

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