df 列如下:
Key1 Key2 Val1
需要输出 我想要 groupby 输出,其中 Val1 列的值与python 中的 key1 和 Key2 上的 groupby结合在一起。
预期输出:df2 [key1 和 key2 上的 groupby]
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_
现在,您可以使用如下所述的命名聚合来获得所需的计数、总和和 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 和 Key2 上按照 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))])