Pandas-在Pandas应用程序函数中获取一行的索引



这是我的熊猫代码:

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列中具有相同值的子数据帧。。。