我正在尝试使用对另一个DataFrame执行的计算结果填充一个DataFrame。 当两个单独的序列满足条件时,这些计算应按一个序列进行。
这是我尝试过的。 我已经建立了一个数据框,该数据框应在其上运行计算,然后创建另一个数据框年产能,以存储条件计算。
$url = "https://{server}/rest/vcenter/services"
Invoke-RestMethod -Method 'Get' -Uri $url -Credential $Cred
我想要获得的结果是每年执行的总和。 例如: 1985年应返回NaN,因为1985年小于起始年份中的任何年份,1992年应返回14880,因为1992年大于任何起始年份并且小于任何终止年份 2001应该返回7200,因为它大于所有start_year且大于所有close_years。 取而代之的是,我的所有三项尝试都只返回了整个年份的NaN。
我设置条件有问题,但是还没有解决。
任何见识都值得赞赏!
答案 0 :(得分:1)
您可以执行以下操作:
# start with an empty dataframe for the summed capacity
# with int32 as type of the year and float32 as type for the capacity
annualcapacity = pd.DataFrame({'years': pd.Series(dtype='int32'), 'capacity': pd.Series(dtype='float32')})
# use your list of years
years= [1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
for y in years:
# create a sum for each year
indexer= (rswcapacity['start_year'] <= y) & ((rswcapacity['closure_year'].isnull()) | (rswcapacity['closure_year'] >= y))
capa= rswcapacity.loc[indexer, 'capacity_actual'].sum()
# and append it to the result frame
annualcapacity= annualcapacity.append(dict(years=y, capacity=capa), ignore_index=True)
annualcapacity
结果如下:
years capacity
0 1980 0.0
1 1981 0.0
2 1982 0.0
3 1983 0.0
4 1984 0.0
5 1985 0.0
6 1986 0.0
7 1987 0.0
8 1988 0.0
9 1989 3200.0
10 1990 6400.0
11 1991 8800.0
12 1992 11200.0
13 1993 13280.0
14 1994 14880.0
15 1995 14880.0
16 1996 14880.0
17 1997 14880.0
18 1998 14880.0
19 1999 14880.0
20 2000 14880.0
21 2001 14880.0
22 2002 11680.0
23 2003 9600.0
24 2004 9600.0
25 2005 9600.0
26 2006 9600.0
27 2007 9600.0
28 2008 9600.0
29 2009 9600.0
30 2010 9600.0
31 2011 9600.0
32 2012 7200.0
33 2013 7200.0
34 2014 7200.0
35 2015 7200.0
36 2016 7200.0
37 2017 7200.0
38 2018 7200.0
39 2019 7200.0
40 2020 7200.0
注意:总和始终为数字,因此,如果一年没有容量,则该值为0.0,而不是NaN
。如果出于某种原因需要NaN
,可以将其替换为下面的行。
第二点是,我切换了您的条件,
(rswcapacity['start_year'] >= y) & ((rswcapacity['closure_year'].isnull()) | (rswcapacity['closure_year'] <= y))
所以>=
变成了<=
,因为我想,您想对当年的所有可用容量求和,对吧?
因此,如果根本没有可用的容量,则需要NaN
条目而不是0.0条目,可以执行以下操作:
annualcapacity.loc[annualcapacity['capacity] == 0, 'capacity']= np.NaN
为此,您需要在标题中添加import numpy as np
。