Python 使用函数或变量创建数据框列/索引名

Python 使用函数或变量创建数据框列/索引名,python,python-3.x,function,pandas,Python,Python 3.x,Function,Pandas,我有一系列的循环,从不同的数据帧计算不同品牌、不同时期的销售额。 下面是我要优化的代码部分: #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.B

我有一系列的循环,从不同的数据帧计算不同品牌、不同时期的销售额。 下面是我要优化的代码部分:

#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-present,NY-next):

所以我只使用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()
data.loc[
   (Data.Brand == lname) & Data['{}_YTD?'.format(var)],   # var + '_YTD?'
   ['Sales']
].sum()