Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数。
apply(),applymap()和map()
apply()和applymap()是DataFrame的函数,map()是Series的函数。
apply()的操作对象是DataFrame的一行或者一列数据,applymap()是DataFrame的每一个元素。map()也是Series中的每一个元素。
apply()对dataframe的内容进行批量处理, 这样要比循环来得快。如df.apply(func,axis=0,.....) func:定义的函数,axis=0时为对列操作,=1时为对行操作。
map()和python内建的没啥区别,如df['one'].map(sqrt)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import numpy as np from pandas import Series, DataFrame frame = DataFrame(np.random.randn( 4 , 3 ), columns = list ( 'bde' ), index = [ 'Utah' , 'Ohio' , 'Texas' , 'Oregon' ]) print frame print np. abs (frame) print f = lambda x: x. max () - x. min () print frame. apply (f) print frame. apply (f, axis = 1 ) def f(x): return Series([x. min (), x. max ()], index = [ 'min' , 'max' ]) print frame. apply (f) print print 'applymap和map' _format = lambda x: '%.2f' % x print frame.applymap(_format) print frame[ 'e' ]. map (_format) |
Groupby
Groupby是Pandas中最为常用和有效的分组函数,有sum()、count()、mean()等统计函数。
groupby 方法返回的 DataFrameGroupBy 对象实际并不包含数据内容,它记录的是df['key1'] 的中间数据。当你对分组数据应用函数或其他聚合运算时,pandas 再依据 groupby 对象内记录的信息对 df 进行快速分块运算,并返回结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
df = DataFrame({ 'key1' : [ 'a' , 'a' , 'b' , 'b' , 'a' ], 'key2' : [ 'one' , 'two' , 'one' , 'two' , 'one' ], 'data1' : np.random.randn( 5 ), 'data2' : np.random.randn( 5 )}) grouped = df.groupby(df[ 'key1' ]) print grouped.mean() df.groupby( lambda x: 'even' if x % 2 = = 0 else 'odd' ).mean() #通过函数分组 |
聚合agg()
对于分组的某一列(行)或者多个列(行,axis=0/1),应用agg(func)可以对分组后的数据应用func函数。例如:用grouped['data1'].agg('mean')也是对分组后的'data1'列求均值。当然也可以同时作用于多个列(行)和使用多个函数上。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
df = DataFrame({ 'key1' : [ 'a' , 'a' , 'b' , 'b' , 'a' ], 'key2' : [ 'one' , 'two' , 'one' , 'two' , 'one' ], 'data1' : np.random.randn( 5 ), 'data2' : np.random.randn( 5 )}) grouped = df.groupby( 'key1' ) print grouped.agg( 'mean' ) data1 data2 key1 a 0.749117 0.220249 b - 0.567971 - 0.126922 |
apply()和agg()功能上差不多,apply()常用来处理不同分组的缺失数据的填充和top N的计算,会产生层级索引。
而agg可以同时传入多个函数,作用于不同的列。
1
2
3
4
5
6
7
8
9
10
11
12
|
df = DataFrame({ 'key1' : [ 'a' , 'a' , 'b' , 'b' , 'a' ], 'key2' : [ 'one' , 'two' , 'one' , 'two' , 'one' ], 'data1' : np.random.randn( 5 ), 'data2' : np.random.randn( 5 )}) grouped = df.groupby( 'key1' ) print grouped.agg([ 'sum' , 'mean' ]) print grouped. apply (np. sum ) #apply的在这里同样适用,只是不能传入多个,这两个函数基本是可以通用的。 |
data1 data2
sum mean sum mean
key1
a 2.780273 0.926758 -1.561696 -0.520565
b -0.308320 -0.154160 -1.382162 -0.691081
data1 data2 key1 key2
key1
a 2.780273 -1.561696 aaa onetwoone
b -0.308320 -1.382162 bb onetwo
apply和agg功能上基本是相近的,但是多个函数的时候还是agg比较方便。
apply本身的自由度很高,如果分组之后不做聚合操作紧紧是一些观察的时候,apply就有用武之地了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
print grouped. apply ( lambda x: x.describe()) data1 data2 key1 a count 3.000000 3.000000 mean - 0.887893 - 1.042878 std 0.777515 1.551220 min - 1.429440 - 2.277311 25 % - 1.333350 - 1.913495 50 % - 1.237260 - 1.549679 75 % - 0.617119 - 0.425661 max 0.003021 0.698357 b count 2.000000 2.000000 mean - 0.078983 0.106752 std 0.723929 0.064191 min - 0.590879 0.061362 25 % - 0.334931 0.084057 50 % - 0.078983 0.106752 75 % 0.176964 0.129447 max 0.432912 0.152142 |
此外apply还能改变返回数据的维度。
http://pandas.pydata.org/pandas-docs/stable/groupby.html
此外还有透视表pivot_table ,交叉表crosstab ,但是我没用过。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/zephyr-1/p/5874678.html