Python 聚合器.first()和.last()之间的差异

Python 聚合器.first()和.last()之间的差异,python,pandas,numpy,aggregation,pandas-resample,Python,Pandas,Numpy,Aggregation,Pandas Resample,我很好奇last()和first()在这个特定实例中做了什么(当链接到重采样时)。如果我错了,请纠正我,但如果您将参数传递到第一个和最后一个,例如3;它返回前3个月或前3年 在这种情况下,由于我没有将任何参数传递到first()和last(),当我这样重新采样它时,它实际上在做什么?我知道,如果我通过链接.mean()重新采样,我将使用所有月份的平均分数重新采样到年份,但是当我使用last()时会发生什么 更重要的是,为什么first()和last()在这方面给了我不同的答案?我看到他们在数字上

我很好奇
last()
first()
在这个特定实例中做了什么(当链接到重采样时)。如果我错了,请纠正我,但如果您将参数传递到第一个和最后一个,例如3;它返回前3个月或前3年

在这种情况下,由于我没有将任何参数传递到
first()
last()
,当我这样重新采样它时,它实际上在做什么?我知道,如果我通过链接
.mean()
重新采样,我将使用所有月份的平均分数重新采样到年份,但是当我使用
last()
时会发生什么

更重要的是,为什么
first()
last()
在这方面给了我不同的答案?我看到他们在数字上是不相等的

i、 e:
post2008.resample().first()!=post2008.resample().last()

TLDR:

  • .first()
    .last()
    做什么
  • 当链接到重采样时,
    .first()
    .last()
    在这种情况下做什么
  • 为什么
    .resample().first()!=。重新采样().last()
  • 这是聚合之前的代码:

    print(df.resample('Y').first())
    
    #将“GDP.csv”读入数据框:GDP
    gdp=pd.read\u csv('gdp.csv',index\u col='DATE',parse\u dates=True)
    #2008年以后的所有gdp数据切片:2008年后
    2008年后=gdp.loc['2008-01-01':,:]
    #打印2008年后的最后8行
    印刷品(2008年后。尾部(8))
    
    这是
    print(post2008.tail(8))
    输出的内容:

                  VALUE
    DATE               
    2014-07-01  17569.4
    2014-10-01  17692.2
    2015-01-01  17783.6
    2015-04-01  17998.3
    2015-07-01  18141.9
    2015-10-01  18222.8
    2016-01-01  18281.6
    2016-04-01  18436.5
    
    下面是按
    last()
    重新采样和聚合的代码:

    #2008年后按年份重新采样,保留最后一次():每年
    每年=2008年后。重新采样('A')。最后一次()
    印刷品(每年)
    
    这就是2008年之后的年鉴。重新采样('A')。最后一次():

    下面是通过
    first()
    重新采样和聚合的代码:

    #2008年后按年份重新采样,保留第一个():按年
    每年=2008年后。重新采样('A')。第一次()
    印刷品(每年)
    
    这就是2008年之后的年鉴。重新采样('A')。首先():


    首先,让我们使用示例数据创建一个数据帧:

    import pandas as pd
    dates = pd.DatetimeIndex(['2014-07-01', '2014-10-01', '2015-01-01',
                                '2015-04-01', '2015-07-01', '2015-07-01',
                                '2016-01-01', '2016-04-01'])
    df = pd.DataFrame({'VALUE': range(1000, 9000, 1000)}, index=dates)
    print(df)
    
    输出将是

    VALUE 2014-07-01 1000 2014-10-01 2000 2015-01-01 3000 2015-04-01 4000 2015-07-01 5000 2015-07-01 6000 2016-01-01 7000 2016-04-01 8000 TypeError:first()缺少1个必需的位置参数:“偏移量”

    另一方面,
    df.resample('Y')
    返回a,其中包含聚合方法等。在这种情况下,它们仅保留每年的第一个(分别是最后一个)值(而不是例如,平均所有值或某种其他聚合):

    价值 2014-07-31 1000.0#这是自2014年7月以来的最后一个(也是唯一一个)值 2014-08-31南#2014年8月无数据 2014-09-30南#2014年9月无数据 2014-10-31 2000.0 2014年11月30日NaN#2014年11月无数据
    在这种情况下,没有值的任何期间都将用NAN填充。此外,在本例中,使用
    first
    而不是
    last
    将返回相同的值,因为每个月(最多)有一个值。

    在其他任何操作之前,让我们使用示例数据创建一个数据框:

    import pandas as pd
    dates = pd.DatetimeIndex(['2014-07-01', '2014-10-01', '2015-01-01',
                                '2015-04-01', '2015-07-01', '2015-07-01',
                                '2016-01-01', '2016-04-01'])
    df = pd.DataFrame({'VALUE': range(1000, 9000, 1000)}, index=dates)
    print(df)
    
    输出将是

    VALUE 2014-07-01 1000 2014-10-01 2000 2015-01-01 3000 2015-04-01 4000 2015-07-01 5000 2015-07-01 6000 2016-01-01 7000 2016-04-01 8000 TypeError:first()缺少1个必需的位置参数:“偏移量”

    另一方面,
    df.resample('Y')
    返回a,其中包含聚合方法等。在这种情况下,它们仅保留每年的第一个(分别是最后一个)值(而不是例如,平均所有值或某种其他聚合):

    价值 2014-07-31 1000.0#这是自2014年7月以来的最后一个(也是唯一一个)值 2014-08-31南#2014年8月无数据 2014-09-30南#2014年9月无数据 2014-10-31 2000.0 2014年11月30日NaN#2014年11月无数据 在这种情况下,没有值的任何期间都将用NAN填充。此外,在本例中,使用
    first
    而不是
    last
    将返回相同的值,因为每个月(最多)有一个值

    VALUE 2014-07-01 1000 2014-10-01 2000
    print(df.last('6M'))
    
    VALUE 2016-01-01 6000 2016-04-01 7000
    print(df.first())
    
    print(df.resample('Y').first())
    
    VALUE 2014-12-31 1000 2015-12-31 3000 # This is the first of the 3 values from 2015 2016-12-31 6000
    print(df.resample('Y').last())
    
    VALUE 2014-12-31 2000 2015-12-31 6000 # This is the last of the 3 values from 2015 2016-12-31 7000
    print(df.resample('M').last().head())
    
    VALUE 2014-07-31 1000.0 # This is the last (and only) value from July, 2014 2014-08-31 NaN # No data for August, 2014 2014-09-30 NaN # No data for September, 2014 2014-10-31 2000.0 2014-11-30 NaN # No data for November, 2014