这是我的熊猫代码:
def calcObj(row):
d = dict(calc1 = iferror(row.Hours1.sum(), row.Hours2.sum(), 0, '+'))
if row.Process == 'A': # this doesn't work
d['ProcessKey'] = 700
else:
d['ProcessKey'] = 500
return pd.Series(d)
df.groupby(['MainProcess']).apply(calcObj)
我正在尝试检查进程名称是否为a,以及是否返回不同的值。不幸的是,它不起作用,我得到以下错误:
属性错误:"DataFrame"对象没有属性"Process"我想这是因为我没有只按MainProcess按进程分组。
是否有任何方法可以在应用功能中访问此项目?任何其他的工作也将是非常愉快的
这是我的示例数据帧,BG/MainProcess、CoreProcess和Process1是索引,Hours1/Hours2是列:
Bg MainProcess CoreProcess Process Hours1 Hours2
Building1 MainProcess-1 CoreProcess-1 S-Process-1 150 250
S-Process-2 150 250
CoreProcess-2 S-Process-3 150 250
S-Process-1 150 250
S-Process-2 150 250
Building2 MainProcess-2 CoreProcess-3 S-Process-1 150 250
S-Process-2 150 250
MainProcess-3 CoreProcess-4 S-Process-1 150 250
S-Process-2 150 250
S-Process-3 150 250
注意,索引中的列不是DataFrame的列!
在您的示例中,由于Process
在(多(索引中,df['Process']
将独立于groupby引发一个KeyError
。您必须重置索引中的列才能使用它。例如,您可以在groupby:之前重置它
df.reset_index(level='Process').groupby(['MainProcess']).apply(calcObj)
但是注意:calcObj
在这里不会接收行,而是MainProcess
列中具有相同值的子数据帧。。。