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