0

以下来自dataferame(底部)的摘录有一个以区域和Quardate为索引的多索引,我想获得一个具有相同索引的新数据框,并且只有每个区域具有最大日期的行..我可以' t 弄清楚如何访问数据帧索引值。我想要类似的东西:

most_recent_date=totRegscore.region.Quradate.max()

这只是告诉我'DataFrame'对象没有属性'region'我也想做:

last_quarter = most_recent_date - relativedelta(months=3)

并执行以下操作:

quarter_score_diff = [most_recent_date, last_quarter].diff()

这是我无法工作的答案的变体...... Pandas Dataframe Sample 输入的摘要计算:

                                                              Score1      Score2  
region                                           Quradate           
North_Central-Birmingham-Tuscaloosa-Anniston 2010-01-15             47           50
                                             2010-04-15             45           60
                                             2010-07-15             45           40

我认为此时我的主要问题是无法使用索引名称选择多索引数据帧的特定行....因此,在获得一个只有当前日期的 dF 和一个只有上个季度日期的 dF 时,差异两个数据框看起来像示例输出:

                                                                      Score1      Score2  
              region                                        Quradate           
quarterly_diff North_Central-Birmingham-Tuscaloosa-Anniston 2010-07-15     7           6
quarterly_diff Huntsville                                   2010-07-15     6           5
4

1 回答 1

3

这就是我通过显示生成函数的意思。这会创建像您一样的样本数据,并呈现和回答;现在你很容易说,嘿,我想要这个(并创建一个示例输出)。

In [40]: df = DataFrame({ 'Score1' : [ 47,45,45,37,35,35], 
                          'Score2' : [50,60,40,50,60,40] },
              index=MultiIndex.from_tuples([ (r,t) for t in date_range('2010-1-1',periods=3,freq='QS')+pd.offsets.Day(14) 
                for r in ['R1','R2'] ], names=['region','date'])).sortlevel()

In [41]: df
Out[41]: 
                   Score1  Score2
region date                      
R1     2010-01-15      47      50
       2010-04-15      45      40
       2010-07-15      35      60
R2     2010-01-15      45      60
       2010-04-15      37      50
       2010-07-15      35      40

我发现这有助于查看实际传递给应用程序的内容,在本例中是一个框架

In [5]: def f(x):
   ...:     print x
   ...:     return x
   ...: 

In [6]: df.groupby(level='region').apply(f)
                   Score1  Score2
region date                      
R1     2010-01-15      47      50
       2010-04-15      45      40
       2010-07-15      35      60
                   Score1  Score2
region date                      
R2     2010-01-15      45      60
       2010-04-15      37      50
       2010-07-15      35      40
Out[6]: 
                   Score1  Score2
region date                      
R1     2010-01-15      47      50
       2010-04-15      45      40
       2010-07-15      35      60
R2     2010-01-15      45      60
       2010-04-15      37      50
       2010-07-15      35      40

对于每个区域,在分数中显示与 2 个时期前的列方式差异

In [16]: df.groupby(level='region').apply(lambda x: x.diff(2))
Out[16]: 
                   Score1  Score2
region date                      
R1     2010-01-15     NaN     NaN
       2010-04-15     NaN     NaN
       2010-07-15     -12      10
R2     2010-01-15     NaN     NaN
       2010-04-15     NaN     NaN
       2010-07-15     -10     -20

与 2 qtrs 前不同,只需返回最后一个值

In [17]: df.groupby(level='region').apply(lambda x: x.diff(2).iloc[-1])
Out[17]: 
        Score1  Score2
region                
R1         -12      10
R2         -10     -20
于 2013-11-03T19:58:22.573 回答