【问题标题】:Populating a new column in a Pandas dataframe, based on a future value from same dataframe X days in the future根据未来 X 天相同数据帧的未来值填充 Pandas 数据帧中的新列
【发布时间】:2021-07-13 05:46:23
【问题描述】:

所以我有一些基于车辆地理位置的数据框。我已经对数据进行了大量预处理,我只缺少最后一列,这是基于已知数据的未来位置。所以数据跨越了 2018 年和 2019 年的整年,我还有 2020 年初到 2019 年底的额外数据。所以基本上,对于每一行数据,每辆车都有一个“区域”位置,其中有一个唯一的 ID。我需要在未来 20 天后用“区域”填充每一行。

为了展示数据框的外观,这里是它的简化版本:

ID Date CurrentZone FutureZone20Days
1 2018-01-01 ZoneX ?
2 2018-02-01 ZoneZ ?
3 2018-03-01 ZoneY ?
4 2018-04-01 ZoneV ?
5 2018-05-01 ZoneR ?
6 2018-06-01 ZoneJ ?
7 2018-07-01 ZoneL ?
8 2018-08-01 ZoneO ?
9 2018-09-01 ZoneU ?
10 2018-10-01 ZoneG ?

所以我尝试了一种超级愚蠢的方法,这似乎可行,但我还没有让代码在大样本上完成,因为它的运行时间就像 O(2^n)。它是对两个版本的数据框的嵌套循环,看起来像这样,虽然它可能无法帮助任何人回答这个问题:

for i, r in df.iterrows():
    vehicle = df.loc[i, "ID"]
    date = df.loc[i, "date"]
    for ind, row in df1.iterrows():
        vehicle1 = df1.loc[ind, "ID"]
        date1 = df1.loc[ind, "date"]
        zone = df1.loc[ind, "Current Zone"]
        if (vehicle == vehicle1) & (date1 == date+timedelta(days=20)):
            df1.loc[i, "FutureLoc20Days"] = zone

最后一点,数据集中实际上有 15 列,如果这会以某种方式影响解决方案,因为我阅读了一些关于设置索引等的类似帖子。

我希望有人可以帮助我解决这个问题。谢谢。

【问题讨论】:

    标签: python pandas dataframe for-loop populate


    【解决方案1】:

    我自己通过生成查找字典而不是查看副本数据帧来解决这个问题,并且运行时速度快了几千倍。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2019-07-10
      • 2017-11-25
      • 1970-01-01
      • 2020-09-20
      • 2021-12-25
      相关资源
      最近更新 更多