如何将两个groupby合并为一个

How to combine two groupby into one

我有两个 GroubBy:

第一个

ser2 = ser.groupby(pd.cut(ser, 10)).sum()

(-2620.137, 476638.7]     12393813
(476638.7, 951152.4]       9479666
(951152.4, 1425666.1]     14381033
(1425666.1, 1900179.8]     5113056
(1900179.8, 2374693.5]     4114429
(2374693.5, 2849207.2]     4929537
(2849207.2, 3323720.9]           0
(3323720.9, 3798234.6]           0
(3798234.6, 4272748.3]     3978230
(4272748.3, 4747262.0]     4747262

第二个:

ser1= pd.cut(ser, 10)
print(ser1.value_counts())

(-2620.137, 476638.7]     110
(476638.7, 951152.4]       15
(951152.4, 1425666.1]      12
(1425666.1, 1900179.8]      3
(2374693.5, 2849207.2]      2
(1900179.8, 2374693.5]      2
(4272748.3, 4747262.0]      1
(3798234.6, 4272748.3]      1
(3323720.9, 3798234.6]      0
(2849207.2, 3323720.9]      0

问题:有没有办法将这些操作合并到一个代码中,以便在同一个主元中进行两个计算table

使用GroupBy.agg, instead value_counts use GroupBy.size:

np.random.seed(2020)
ser = pd.Series(np.random.randint(40, size=100))    
df = ser.groupby(pd.cut(ser, 10)).agg(['sum','size'])
print (df)
               sum  size
(-0.039, 3.9]   27    14
(3.9, 7.8]      49     9
(7.8, 11.7]    142    15
(11.7, 15.6]   151    11
(15.6, 19.5]   159     9
(19.5, 23.4]   187     9
(23.4, 27.3]   253    10
(27.3, 31.2]   176     6
(31.2, 35.1]   231     7
(35.1, 39.0]   375    10

如果需要自定义列名:

np.random.seed(2020)
ser = pd.Series(np.random.randint(40, size=100))    
df = ser.groupby(pd.cut(ser, 10)).agg([('col1','sum'),('col2','size')])
print (df)
               col1  col2
(-0.039, 3.9]    27    14
(3.9, 7.8]       49     9
(7.8, 11.7]     142    15
(11.7, 15.6]    151    11
(15.6, 19.5]    159     9
(19.5, 23.4]    187     9
(23.4, 27.3]    253    10
(27.3, 31.2]    176     6
(31.2, 35.1]    231     7
(35.1, 39.0]    375    10