我有一系列循环来计算不同品牌的销售额,不同时期来自不同的数据框架。 这是我想要优化的代码的一部分:
#shname,dep,lname,y - come from itterables
var=shname+dep+'ytd'+lname
if dep == 'PY': ytd=data.loc[(Data.Brand==lname) & (Data['PY_YTD?']==True),['Sales']].sum()
if dep == 'NY': ytd=data.loc[(Data.Brand==lname) & (Data['NY_YTD?']==True),['Sales']].sum()
exec('%s=%d' % (var,ytd))
如您所见,根据报告年度(PY - 现在,纽约 - 下一个),数据框中的列名恰好不同:
Data['PY_YTD?']==True
Data['NY_YTD?']==True
所以我只是使用了IF。但是我想知道是否有办法使用某种函数来根据当前迭代值计算列名
我想它看起来应该是这样的:
def YEAR (y):
if y = 'PY': return Data['PY_YTD?']==True
if y = 'NY': return Data['NY_YTD?']==True
ytd=data.loc[(Data.Brand==lname) & (YEAR(var)),['Sales']].sum()s
非常感谢您的帮助
答案 0 :(得分:1)
我想你可以将var
插入一个更大的字符串中:
data.loc[
(Data.Brand == lname) & Data['{}_YTD?'.format(var)], # var + '_YTD?'
['Sales']
].sum()