假设数据帧df包含列a,b,c,d。 我知道在Panda中定义聚合值的函数的方法,如:
def my_agg(x):
names = {
'a_Total': x['a'].sum(),
'b_Mean': x['b'].mean()
}
return pd.Series(names, index=['a_Total','b_Mean'])
d_aggregate = df.groupby(['c','d']).apply(my_agg)
我正在寻找的方法是分别根据列中的选择值取a或b的总和或平均值的方法' c'或者' d'。
示例数据:
df=pd.DataFrame({"a":[10,20,30,40],
"b":[1,2,3,4],
"c":[c1,c1,c1,c2],
"d":[100,200,300,400]})
我的综合功能:
def my_agg91(x):
names = {
'Sum_a': x['a'].sum(),
'Mean_b': x['b'].mean()}
return pd.Series(names, index=['Sum_a','Mean_b'])
df2= df.groupby(['c']).apply(my_agg91)
给了我:
Sum_a Mean_b
c
c1 60.0 2.0
c2 40.0 4.0
我想要的:' a'对于'<<<<><< 250&对于'>> 250(在单个数据帧中) 请建议功能的变化以获得输出:
Sum_a Mean_b
c
c1 30.0 3.0
c2 0.0 4.0
答案 0 :(得分:0)
根据您的功能进行过滤,例如:
def my_agg92(x):
names = {
'Sum_a': x[x['d'] < 250]['a'].sum(),
'Mean_b': x[x['d'] > 250]['b'].mean()}
return pd.Series(names, index=['Sum_a','Mean_b'])
df.groupby(['c']).apply(my_agg92)