Python Pandas聚合运算

数据处理的最后一步为数据聚合,通常指的是转换数据,是每一个数组生成一个单一的数值。我们已经做过多种数据聚合操作,例如sum( )、mean( )和count( )。这些函数均是操作一组数据,得到的结果只有一个数值。然而,对数据进行分类等聚合操作更为正式,对数据的控制力更强。

对分组进行一系列的操作,内置聚合函数

df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],
                   'key2': ['one', 'two', 'one', 'two', 'one'],
                   'data1': np.random.randint(1, 10, 5),
                   'data2': np.random.randint(1, 10, 5)})
print(df.groupby('key1').describe())
     data1                                 ...     data2                         
     count mean       std  min   25%  50%  ...       std  min  25%  50%  75%  max
key1                                       ...                                   
a      3.0  3.0  2.645751  1.0  1.50  2.0  ...  1.732051  2.0  2.0  2.0  3.5  5.0
b      2.0  3.5  3.535534  1.0  2.25  3.5  ...  5.656854  1.0  3.0  5.0  7.0  9.0
grouped = df.groupby('key1')
print(grouped)
d = {'data1': 'mean',
     'data2': 'sum'}
print(grouped.agg(d))
        data1  data2
key1                 
a     6.666667     16
b     1.500000      6
df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],
                   'key2': ['one', 'two', 'one', 'two', 'one'],
                   'data1': np.random.randint(1, 10, 5),
                   'data2': np.random.randint(1, 10, 5)})
k1_mean = df.groupby('key1').mean().add_prefix('mean_')
print(k1_mean)
      mean_data1  mean_data2
key1                        
a            6.0         3.0
b            3.5         4.5

两个表进行合并

print(pd.merge(df, k1_mean, left_on='key1', right_index=True))
  key1 key2  data1  data2  mean_data1  mean_data2
0    a  one      9      9    7.333333         6.0
1    a  two      8      1    7.333333         6.0
4    a  one      5      8    7.333333         6.0
2    b  one      1      2    5.000000         4.0
3    b  two      9      6    5.000000         4.0

第二种方法

k1_mean = df.groupby('key1').transform(np.mean)
print(k1_mean)
   data1     data2
0    7.0  4.333333
1    7.0  4.333333
2    5.5  7.000000
3    5.5  7.000000
4    7.0  4.333333

新加两个列

df[k1_mean.columns] = k1_mean
print(df)
  key1 key2  data1     data2
0    a  one      7  5.333333
1    a  two      7  5.333333
2    b  one      3  3.000000
3    b  two      3  3.000000
4    a  one      7  5.333333
df = pd.DataFrame(np.random.randint(1, 10, (5, 5)),
                  columns=['a', 'b', 'c', 'd', 'e'],
                  index=['Alice', 'Bob', 'Candy', 'Dark', 'Emily'])
def demean(s):
    return s - s.mean()
key = ['one', 'one', 'two', 'one', 'two']
demean = df.groupby(key).transform(demean)
print(demean)
             a         b         c         d         e
Alice -0.666667  2.333333 -0.333333  1.666667  2.333333
Bob   -1.666667  2.333333  0.666667 -1.333333  2.333333
Candy  0.000000  2.000000  1.500000 -0.500000 -0.500000
Dark   2.333333 -4.666667 -0.333333 -0.333333 -4.666667
Emily  0.000000 -2.000000 -1.500000  0.500000  0.500000

apply方法进行分组
某一个排序输出最大的前两行

def top(g, n=2 ,column='data1'):
    return g.sort_values(by=column, ascending=False)[:n]
top(df)
 key1 key2  data1  data2
0    a  one      9      9
5    a  one      9      9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值