使用function或var创建数据框列/索引名称

时间:2018-03-16 22:09:40

标签: 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.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

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我想你可以将var插入一个更大的字符串中:

data.loc[
   (Data.Brand == lname) & Data['{}_YTD?'.format(var)],   # var + '_YTD?'
   ['Sales']
].sum()