我有一系列循环,可以根据不同的数据帧计算不同品牌、不同时期的销售额。 这是我想要优化的代码部分:
#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 - 当前,NY - 下一个):
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
非常感谢您的帮助
最佳答案
我想你可以将 var
插入到更大的字符串中:
data.loc[
(Data.Brand == lname) & Data['{}_YTD?'.format(var)], # var + '_YTD?'
['Sales']
].sum()
关于python - 使用 function 或 var 创建数据框列/索引名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49330175/