【发布时间】:2020-01-12 02:01:02
【问题描述】:
我正在尝试使用在不同 DataFrame 上执行的计算结果来填充 DataFrame。 当两个单独的系列中满足条件时,这些计算应该在一个系列上运行。
这是我尝试过的。 我已经建立了一个数据框,rswcapacity 应该在其上运行计算,然后创建了另一个数据框年容量,我希望在其中存储条件计算。
#First DataFrame
d = {'technology': ['EAF', 'EAF', 'EAF', 'BOF', 'BOF', 'BOF'], 'equip_detail1': [150, 130, 100, 200, 200, 150], 'equip_number' : [1, 2, 3, 1, 2, 3], 'capacity_actual': [2400, 2080, 1600, 3200, 3200, 2400], 'start_year': [1992, 1993, 1994, 1989, 1990, 1991], 'closure_year': [ '', 2002, '', '', 2001, 2011] }
rswcapacity = pd.DataFrame(data = d)
rswcapacity['closure_year'].replace('', np.nan, inplace = True)
#Second DataFrame
annualcapacity = pd.DataFrame(columns=['years', 'capacity'])
annualcapacity ['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]
#Neither of the attempts below yields the desired results:
for y in years:
annualcapacity['capacity'].append(rswcapacity['capacity_actual'].apply(lambda x : x['capacity_actual'].sum() (x['start_year'] >= y & (x['closure_year'] <= y | x['closure_year'].isnull()))).sum())
annualcapacity
#other attempt:
for y in years:
if (rswcapacity['start_year'] >= y).any() & ((rswcapacity['closure_year'].isnull()).any() | (rswcapacity['closure_year'] <= y).any()):
annualcapacity['capacity'].append(rswcapacity['capacity_actual'].sum())
annualcapacity
我想要获得的结果是每年执行的总和。 例如: 1985 应该返回 NaN,因为 1985 小于 start_year 中的任何年份 1992 应该返回 14880,因为 1992 大于任何 start_year 并且小于任何closure_year 2001 应该返回 7200,因为它大于所有 start_year 并且大于所有closure_years。 相反,我的所有三个尝试都只在年份列表中返回 NaN。
我设置的条件有问题,但还没有弄清楚是什么。
非常感谢任何见解!
【问题讨论】:
标签: pandas sum conditional-statements