我认为您可以使用:
print df.groupby('A').agg({'B': lambda x: df.loc[x.index, 'C'][x >= 0].sum(), 'C': lambda x: df.loc[x.index, 'B'][x >= 0].sum()}) C BA bar 11 10foo 6 -5自定义函数更适合于理解:
def f(x): s = df.loc[x.index, 'C'] return s[x>=0].sum()def f1(x): s = df.loc[x.index, 'B'] return s[x>=0].sum()print df.groupby('A').agg({'B': f, 'C': f1}) C BA bar 11 10foo 6 -5编辑:
root的解决方案非常好,但是可以更好:
def my_func(row): b = row[row.C >= 0].B.sum() c = row[row.B >= 0].C.sum() return pd.Series({'C':b, 'B':c})result = df.groupby('A').apply(my_func) C BA bar 11 10foo 6 -5


