gpt4 book ai didi

python - 创建时间序列数据框的最快方法

转载 作者:行者123 更新时间:2023-12-04 07:53:37 25 4
gpt4 key购买 nike

我想获取包含时间间隔和时间的数据 重复 并基本上使用任何给定时间的第一次出现并向前填充来创建时间序列。考虑以下示例。
假设这是我们感兴趣的时间范围:


时间


1:00

1:01

1:02

1:03

1:04

1:05


这是数据,dataframe X,我们想放入我们的时间序列中:


出现次数
值(value)


1:00
“R”

1:03
“G”

1:03
“L”

1:03
“P”

1:03
“T”

1:05
“S”


这是最终的数据框:


出现次数
值(value)


1:00
“R”

1:01
“R”

1:02
“R”

1:03
“G”

1:04
“G”

1:05
“S”


如您所见,在最终数据帧中,1:00 的值为“R”,因为这是数据帧 X 中第一次出现 1:00 时的值。1:01 和 1:02 的值也为“R”因为数据帧 X 中没有这些时间实例的数据,因此将使用最后一个有效值(即 1:00 的值)。 1:03 的值为“G”,因为与 1:00 的情况类似,“G”是我们在数据帧 X 中的 1:03 的第一个值。由于数据帧 X 中没有 1:04 的值, 1:04 获取我们生成的数据帧中的最后一个有效值“G”。最后,1:05 在我们生成的数据帧中将具有值“S”,因为这是 1:05 在数据帧 X 中第一次出现的值。
实现这一目标的最快方法是什么?

最佳答案

merge_asof解决方案 下面看看最终的解决方案。
首先,我们需要将这些列更改为 pd.Timedelta :

df1['Time'] = pd.to_timedelta(df1['Time'] + ':00')
df2['Occurance'] = pd.to_timedelta(df2['Occurance'] + ':00')
那么我们可以 merge_asof
pd.merge_asof(df1, df2, left_on='Time', right_on='Occurance')

Time Occurance Value
0 0 days 01:00:00 0 days 01:00:00 R
1 0 days 01:01:00 0 days 01:00:00 R
2 0 days 01:02:00 0 days 01:00:00 R
3 0 days 01:03:00 0 days 01:03:00 T
4 0 days 01:04:00 0 days 01:03:00 T
5 0 days 01:05:00 0 days 01:05:00 S
这有几个问题:
  • 列数比指定的 OP 多。
  • 我有 T s 而不是 G s

  • 好的摆脱列,我们只是重命名其中一列而不是使用 left_on/ right_on
    pd.merge_asof(df1.set_axis(['Occurance'], axis=1), df2)

    Occurance Value
    0 0 days 01:00:00 R
    1 0 days 01:01:00 R
    2 0 days 01:02:00 R
    3 0 days 01:03:00 T
    4 0 days 01:04:00 T
    5 0 days 01:05:00 S
    但是我们还有 T s 而不是 G s 那是因为看看 df2
            Occurance Value
    0 0 days 01:00:00 R
    1 0 days 01:03:00 G # same Occurance
    2 0 days 01:03:00 L # same Occurance
    3 0 days 01:03:00 P # same Occurance
    4 0 days 01:03:00 T # same Occurance
    5 0 days 01:05:00 S
    显然,Pandas 选择了最后一个,而 OP 想要第一个。所以让我们再试一次 drop_duplicates解决方案
    pd.merge_asof(df1.set_axis(['Occurance'], axis=1),
    df2.drop_duplicates('Occurance'))

    Occurance Value
    0 0 days 01:00:00 R
    1 0 days 01:01:00 R
    2 0 days 01:02:00 R
    3 0 days 01:03:00 G
    4 0 days 01:04:00 G
    5 0 days 01:05:00 S

    关于python - 创建时间序列数据框的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66819864/

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