df列如下:
Key1 Key2 Val1
需要输出我想要groupby输出,其中Val1列的值与python中键Key1和Key2上的groupby组合在一起。
预期输出:df2[key1和key2]
Key1 Key2 Val1 Count Sum Q1 Q2 Q3
创建一个函数来计算Q1、Q2和Q3:25、50和75个百分位数,如下所示:
def percentile(n):
def percentile_(x):
return np.percentile(x, n)
percentile_.__name__ = 'percentile_%s' % n
return percentile_
现在,您可以使用下面提到的命名聚合来获得所需的count、sum和3个四分位数列。
df2 = (df.groupby(["Key1", "Key2"])
.agg(Count=(" Val1", 'count'),
Sum=('Val1','sum'),
Q1= (' Val1',percentile(25), #This is for first quartile
Q2= (' Val1',percentile(50), #2nd Quartile
Q3= (' Val1',percentile(75)) #This is for Quartile 3
随机,例如
df说是
Key1 Key2 Val1
a a 1
a a 2
a a 3
a a 4
b b 5
b b 6
b b 7
b b 8
df2将在键Key1和键2上按groupby的要求具有以下列。
Key1 Key2 Count Sum Q1 Q2 Q3
a a 4 10 1 2.5 3
b b 4 6.5 5 6.5 7
df2 = df.groupby(['Key1','Key2'])['Val1']
.agg([('Count','count'),
('Sum','sum'),
('Q1', lambda x: x.quantile(0.25)),
('Q2', lambda x: x.quantile(0.5)),
('Q3', lambda x: x.quantile(0.75))])