温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Select last row from each column of multi-index Pandas DataFrame based on time, when columns are une
dataframe pandas time-series multi-index

其他 - 当列为une时,根据时间从多索引Pandas DataFrame的每一列中选择最后一行

发布于 2020-03-30 21:27:30

我有以下Pandas多索引DataFrame,其顶级索引是组ID,第二级索引是whenISO 8601时间格式(此处显示的没有时间):

                                     value      weight
                         when                     
5e33c4bb4265514aab106a1a 2011-05-12   1.34       0.79
                         2011-05-07   1.22       0.83
                         2011-05-03   2.94       0.25
                         2011-04-28   1.78       0.89
                         2011-04-22   1.35       0.92
...                                    ...        ...
5e33c514392b77d517961f06 2009-01-31  30.75       0.12
                         2009-01-24  30.50       0.21
                         2009-01-23  29.50       0.96
                         2009-01-10  28.50       0.98
                         2008-12-08  28.50       0.65

when当前定义为,index但这不是必需条件。

断言

  1. when 可能是不唯一的。
  2. 跨组的列长度可能不相等
  3. 在组内whenvalue并且weight将始终具有相等的长度(对于每个when总会有a value和aweight

使用参数index_time,如何检索:

  1. 最近的过去的valueweight从每个相组index_time之间与所述差(秒)沿index_timewhen
  2. index_time可能是过去的时间,因此仅选择when<=的条目index_time
  3. 应该以某种方式对结果建立索引,以便可以推导出每个结果的组ID

根据以上所述,如果index_time是,2011-05-10则结果应为:

                          value     weight      age                     
5e33c4bb4265514aab106a1a   1.22      0.83      259200
5e33c514392b77d517961f06  30.75      0.12    72576000

查看更多

提问者
Tintin
被浏览
25
Tintin 2020-02-01 11:58

DataFrame问题中给出的原始文件df

import pandas as pd

df.sort_index(inplace=True)
result = df.loc[pd.IndexSlice[:, :when], :].groupby('id').tail(1)
result['age'] =  when - result.index.get_level_values(level=1)