【问题标题】:get next value in list Pandas获取列表 Pandas 中的下一个值
【发布时间】:2015-04-21 23:43:41
【问题描述】:

我有一个按时间顺序排列的唯一日期列表。
我有一个包含日期的数据框。我想使用数据框中的日期列表来获取列表中的下一个日期(在列表中的数据框中找到日期,将日期返回到它的右侧(下一个按时间顺序排列的日期)。

有什么想法吗?

【问题讨论】:

  • 我有一个包含 40000 个日期的数据表。我得到了一个唯一的日期列表,并对它们进行了排序。现在我要做的是对于日期(t),将日期(t+1)附加到数据框。我不想写 for 循环,因为我有 40000 个日期

标签: python list pandas


【解决方案1】:

似乎无法打印该列表,而且您没有向我们提供任何可使用的代码,或者您的日期时间的打印示例。我最好的建议是使用排序功能。

dataframe.sort()

如果我想打印一个特定的日期,我不得不说,一旦你对它进行排序,就按索引号打印它。在不知道您的计算机处理这种大小的打印语句的能力的情况下,我建议将此排序的文件复制到一个 out txt 文件中,以确保您得到正确的响应。

【讨论】:

    【解决方案2】:

    因此,对于数据框中的每个项目,在唯一日期列表中都有与其日期完全匹配的日期,您希望将其移至下一个日期

    你真的应该用字典来解决这个问题

    next_date_dictionary = dict(zip(sequential_list_of_dates,sequential_list_of_dates[1:]))
    

    然后你只需在字典中查找下一个日期

    next_date = next_date_dictionary.get(row.date)
    

    或者,如果您想替换日期列,您可以使用replace

    data_frame.replace({"date":next_date_dictionary})
    

    【讨论】:

      【解决方案3】:

      好的,这是一种方法:

      In [210]:
      # generate some data
      df = pd.DataFrame({'dates':pd.date_range(start=dt.datetime(2014,3,2), end=dt.datetime(2014,4,23))})
      df.info()
      <class 'pandas.core.frame.DataFrame'>
      Int64Index: 53 entries, 0 to 52
      Data columns (total 1 columns):
      dates    53 non-null datetime64[ns]
      dtypes: datetime64[ns](1)
      memory usage: 848.0 bytes
      

      现在我将从您的日期列表中创建一个 df:

      In [219]:
      
      base = dt.datetime(2014,5,3)
      date_list = [base - dt.timedelta(days=x) for x in range(0, 70)]
      date_df = pd.DataFrame({'dates':date_list})
      date_df.info()
      <class 'pandas.core.frame.DataFrame'>
      Int64Index: 70 entries, 0 to 69
      Data columns (total 1 columns):
      dates    70 non-null datetime64[ns]
      dtypes: datetime64[ns](1)
      memory usage: 1.1 KB
      

      然后在date_df那个shiftsdates列中添加一个新列,然后将索引设置为dates:

      In [220]:
      
      date_df['date_lookup'] = date_df['dates'].shift(1)
      date_df = date_df.set_index('dates')
      date_df.head()
      Out[220]:
                 date_lookup
      dates                 
      2014-05-03         NaT
      2014-05-02  2014-05-03
      2014-05-01  2014-05-02
      2014-04-30  2014-05-01
      2014-04-29  2014-04-30
      

      然后在 orig df 上调用 map 并传递 date_df 并访问 date_lookup 列,map 将使用索引执行查找,该查找将返回相应的下一个值:

      In [221]:
      
      df['date_next'] = df['dates'].map(date_df['date_lookup'])
      df.head()
      Out[221]:
             dates  date_next
      0 2014-03-02 2014-03-03
      1 2014-03-03 2014-03-04
      2 2014-03-04 2014-03-05
      3 2014-03-05 2014-03-06
      4 2014-03-06 2014-03-07
      

      【讨论】:

        猜你喜欢
        • 2020-03-10
        • 1970-01-01
        • 2015-12-30
        • 2014-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        相关资源
        最近更新 更多