python panda3d从入门_笔记:Python之Pandas的使用技巧

Pandas的使用技巧相关知识点总结

python panda3d从入门_笔记:Python之Pandas的使用技巧

pandas的使用技巧相关知识点总结表.png

一、数学计算与统计基础

(1)基本参数axis和skipna

基本参数:axis、skipna

创建dataframe

df = pd.DataFrame({‘key1’:[4,5,3,np.nan,2],

‘key2’:[1,2,np.nan,4,5],

‘key3′:[1,2,3,’j’,’k’]},

index = [‘a’,’b’,’c’,’d’,’e’])

print(df)

print(df[‘key1’],df[‘key1’].dtype)

print(df[‘key2’],df[‘key2’].dtype)

print(df[‘key3’],df[‘key3’].dtype)

print(‘———————‘)

data = df.mean()

print(data)

.mean()计算均值,只统计元素是数字的列

按列计算每列的平均值,因key3含有字符串,返回只有key1和key2

单独统计一列,就索引要统计那列即可

单独统计key2这列

data2 = df[‘key2’].mean()

print(data2)

print(‘———————‘)

参数axis,默认为0,按列来计算

参数axis=1,则按行来计算

data3 = df.mean(axis=1)

print(data3)

print(‘———————‘)

从返回的data3结果来看,因原数据dataframe中含Nan,默认自动忽略Nan

参数skipna就是定义是否忽略Nan

参数skipna默认为True → 忽略Nan

参数skipna为False → 不忽略Nan,有Nan的列统计结果仍为Nan

data4 = df.mean(skipna=False)

data5 = df.mean(axis=1,skipna=False)

print(data4)

print(data5)

输出结果:

key1 key2 key3

a 4.0 1.0 1

b 5.0 2.0 2

c 3.0 NaN 3

d NaN 4.0 j

e 2.0 5.0 k

a 4.0

b 5.0

c 3.0

d NaN

e 2.0

Name: key1, dtype: float64 float64

a 1.0

b 2.0

c NaN

d 4.0

e 5.0

Name: key2, dtype: float64 float64

a 1

b 2

c 3

d j

e k

Name: key3, dtype: object object

a 2.5

b 3.5

c 3.0

d 4.0

e 3.5

dtype: float64

主要数学计算方法①

可用于Series和DataFrame

df = pd.DataFrame({‘key1’:np.arange(10),

‘key2’:np.random.rand(10)*10})

print(df)

print(‘—————–‘)

print(df.count(),’→ count统计非Na值的数量\n’)

print(df.min(),’→ min统计最小值\n’,df[‘key2′].max(),’→ max统计最大值\n’)

print(df.quantile(q=0.75),’→ quantile统计分位数,参数q确定位置\n’)

print(df.sum(),’→ sum求和\n’)

print(df.mean(),’→ mean求平均值\n’)

print(df.median(),’→ median求算数中位数,50%分位数\n’)

print(df.std(),’\n’,df.var(),’→ std,var分别求标准差,方差\n’)

print(df.skew(),’→ skew样本的偏度\n’)

print(df.kurt(),’→ kurt样本的峰度\n’)

输出结果:

key1 key2

0 0 4.253328

1 1 0.960379

2 2 3.511730

3 3 2.509393

4 4 0.054089

5 5 8.111823

6 6 4.844677

7 7 3.198498

8 8 3.034000

9 9 3.702352

主要数学计算方法②

可用于Series和DataFrame(2)

df = pd.DataFrame({‘key1’:np.arange(10),

‘key2’:np.random.rand(10)*10})

print(df)

print(‘—————–‘)

.cumsum()计算累计和

df[‘key1_s’] = df[‘key1’].cumsum()

df[‘key2_s’] = df[‘key2’].cumsum()

print(df,’→ cumsum样本的累计和\n’)

print(‘—————–‘)

.cumprod()计算累计积

df[‘key1_p’] = df[‘key1’].cumprod()

df[‘key2_p’] = df[‘key2’].cumprod()

print(df,’→ cumprod样本的累计积\n’)

print(‘—————–‘)

.cummax()求累计最大值,就是指累计的过程中要累计的数据中最大的值,就会一直被填充

.cummin()求累计最小值,就是指累计的过程中要列举的数据中最小的值,就会一直被填充

print(df.cummax(),’\n’,df.cummin(),’→ cummax,cummin分别求累计最大值,累计最小值\n’)

会填充key1,和key2的值

输出结果:

key1 key2

0 0 6.782298

1 1 8.826684

2 2 5.330644

3 3 1.284093

4 4 2.040580

5 5 5.194812

6 6 4.981178

7 7 3.467392

8 8 6.802496

9 9 1.212725

key1 key2 key1_s key2_s key1_p key2_p

0 0 6.782298 0 6.782298 0 6.782298

1 1 8.826684 1 15.608982 0 59.865201

2 2 5.330644 3 20.939626 0 319.120053

3 3 1.284093 6 22.223719 0 409.779981

4 4 2.040580 10 24.264299 0 836.188665

5 5 5.194812 15 29.459111 0 4343.843239

6 6 4.981178 21 34.440289 0 21637.455452

7 7 3.467392 28 37.907680 0 75025.529833

8 8 6.802496 36 44.710176 0 510360.865310

9 9 1.212725 45 45.922902 0 618927.582201 → cumprod样本的累计积

[‘a’ ‘s’ ‘d’ ‘v’ ‘c’ ‘f’ ‘g’]

0 a

1 s

2 d

3 v

4 c

5 f

6 g

dtype: object

[‘a’ ‘c’ ‘d’ ‘f’ ‘g’ ‘s’ ‘v’]

(4)值values的计数.value_counts()

值计数:.value_counts()

s = pd.Series(list(‘asdvasdcfgg’))

print(s)

print(‘—————–‘)

对s的values进行计数(次数)

sc = s.value_counts()

print(sc)

sc2 = s.value_counts(sort=False)

print(sc2)

得到一个新的Series,计算出不同值出现的频率

sort参数:排序,默认为True

print(‘—————–‘)

print(s)

输出结果:

0 a

1 s

2 d

3 v

4 a

5 s

6 d

7 c

8 f

9 g

10 g

dtype: object

0 a

1 s

2 d

3 v

4 a

5 s

6 d

7 c

8 f

9 g

10 g

dtype: object

(5)成员资格判断.isin()

成员资格:.isin()

s = pd.Series(np.arange(10,15))

df = pd.DataFrame({‘key1’:list(‘asdcbvasd’),

‘key2’:np.arange(4,13)})

print(s)

print(df)

print(‘—–‘)

print(s.isin([5,14])) # 判断5或14是否在s里

print(df.isin([‘a’,’bc’,’10’,8]))

用[]表示

得到一个布尔值的Series或者Dataframe

输出结果:

0 10

1 11

2 12

3 13

4 14

dtype: int32

key1 key2

0 a 4

1 s 5

2 d 6

3 c 7

4 b 8

5 v 9

6 a 10

7 s 11

8 d 12

key1 key2

0 a hee

1 b fv

2 c w

3 d hija

4 e 123

5 f NaN

字符串常用方法①- lower,upper,len,startswith,endswith

s = pd.Series([‘A’,’b’,’bbhello’,’123′,np.nan])

print(s)

print(‘—————-‘)

将文本数据的字符串字母变小写

print(s.str.lower(),’→ lower小写\n’)

将文本数据的字符串字母变大写

print(s.str.upper(),’→ upper大写\n’)

计数每行数据的字符串长度

print(s.str.len(),’→ len字符长度\n’)

print(s.str.startswith(‘b’),’→ 判断起始是否为a\n’)

print(s.str.endswith(‘3′),’→ 判断结束是否为3\n’)

输出结果:

0 A

1 b

2 bbhello

3 123

4 NaN

dtype: object

字符串常用方法② – strip

创建Series和Dataframe

s = pd.Series([‘ jack’, ‘jill ‘, ‘ jesse ‘, ‘frank’])

df = pd.DataFrame(np.random.randn(3, 2), columns=[‘ Column A ‘, ‘ Column B ‘],

index=range(3))

print(s)

print(df)

print(‘————-‘)

print(s.str.strip()) # 去除字符串中的空格

print(s.str.lstrip()) # 去除字符串中的左空格

print(s.str.rstrip()) # 去除字符串中的右空格

df.columns = df.columns.str.strip()

print(df)

这里去掉了columns的前后空格,但没有去掉中间空格

那就可以用replace将中间空格替换为其他

输出结果:

0 jack

1 jill

2 jesse

3 frank

dtype: object

Column A Column B

0 -0.680736 0.817757

1 -1.037254 -1.264084

2 0.424927 -1.150749

字符串常用方法(3) – replace

df = pd.DataFrame(np.random.randn(3, 2), columns=[‘ Column A ‘, ‘ Column B ‘],

index=range(3))

print(df)

df.columns = df.columns.str.replace(‘ ‘,’-‘)

print(df)

用.replace替换,将中间的空格用”-“替换

df.columns = df.columns.str.replace(‘-‘,’hehe’,n=1)

print(df)

“-“用hehe来替换,且只替换一个”-“

参数n=1,表示替换个数为1个

输出结果:

Column A Column B

0 0.143967 -0.426351

1 -1.210151 0.320342

2 -0.825522 -1.299585

-Column-A- -Column-B-

0 0.143967 -0.426351

1 -1.210151 0.320342

2 -0.825522 -1.299585

heheColumn-A- heheColumn-B-

0 0.143967 -0.426351

1 -1.210151 0.320342

2 -0.825522 -1.299585

[‘a’, ‘b’, ‘c’]

0 1 2

0 a b c

1 1 2 3

2 NaN NaN NaN

3 NaN NaN NaN

0 1

0 a b,c

1 1 2,3

2 NaN NaN

3 NaN NaN

0 1

0 a,b c

1 1,2 3

2 NaN NaN

3 NaN NaN

0 A

1 b

2 C

3 b

4 1

5 NaN

6 h

dtype: object

0 A

1 b

2 C

3 bb

4 12

5 NaN

6 hj

dtype: object

0 h

1 f

2 w

3 h

4 1

5 NaN

Name: key2, dtype: object

三、pandas的合并merge、join

Pandas具有全功能的,高性能内存中连接操作,与SQL等关系数据库非常相似。

(1)合并merge

pd.merge(left, right, how=’inner’, on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=(‘_x’, ‘_y’), copy=True, indicator=False)

A B key C D

0 A0 B0 K0 C0 D0

1 A1 B1 K1 C1 D1

2 A2 B2 K2 C2 D2

3 A3 B3 K3 C3 D3

A B key1 key2 C D

0 A0 B0 K0 K0 C0 D0

1 A2 B2 K1 K0 C1 D1

2 A2 B2 K1 K0 C2 D2

A B key1 key2 C D

0 A0 B0 K0 K0 C0 D0

1 A2 B2 K1 K0 C1 D1

2 A2 B2 K1 K0 C2 D2

A B key1 key2 C D

0 A0 B0 K0 K0 C0 D0

1 A1 B1 K0 K1 NaN NaN

2 A2 B2 K1 K0 C1 D1

3 A2 B2 K1 K0 C2 D2

4 A3 B3 K2 K1 NaN NaN

参数 left_on, right_on, left_index, right_index → 当键不为一个列时,可以单独设置左键与右键

df1 = pd.DataFrame({‘lkey’:list(‘bbacaab’),

‘data1’:range(7)})

df2 = pd.DataFrame({‘rkey’:list(‘abd’),

‘date2’:range(3)})

print(pd.merge(df1, df2, left_on=’lkey’, right_on=’rkey’))

print(‘——‘)

df1以’lkey’为键,df2以’rkey’为键

df1 = pd.DataFrame({‘key’:list(‘abcdfeg’),

‘data1’:range(7)})

df2 = pd.DataFrame({‘date2’:range(100,105)},

index = list(‘abcde’))

print(pd.merge(df1, df2, left_on=’key’, right_index=True))

df1以’key’为键,df2以index为键

left_index:为True时,第一个df以index为键,默认False

right_index:为True时,第二个df以index为键,默认False

所以left_on, right_on, left_index, right_index可以相互组合:

left_on + right_on, left_on + right_index, left_index + right_on, left_index + right_index

输出结果:

data1 lkey date2 rkey

0 0 b 1 b

1 1 b 1 b

2 6 b 1 b

3 2 a 0 a

4 4 a 0 a

5 5 a 0 a

参数 sort

df1 = pd.DataFrame({‘key’:list(‘bbacaab’),

‘data1’:[1,3,2,4,5,9,7]})

df2 = pd.DataFrame({‘key’:list(‘abd’),

‘date2’:[11,2,33]})

print(df1)

print(df2)

x1 = pd.merge(df1,df2, on = ‘key’, how = ‘outer’)

x2 = pd.merge(df1,df2, on = ‘key’, sort=True, how = ‘outer’)

print(x1)

print(x2)

print(‘——‘)

sort:按照字典顺序通过 连接键 对结果DataFrame进行排序。默认为False,设置为False会大幅提高性能

print(x2.sort_values(‘data1’)) # 对data1进行排序

也可直接用Dataframe的排序方法:sort_values,sort_index

输出结果:

data1 key

0 1 b

1 3 b

2 2 a

3 4 c

4 5 a

5 9 a

6 7 b

date2 key

0 11 a

1 2 b

2 33 d

data1 key date2

0 1.0 b 2.0

1 3.0 b 2.0

2 7.0 b 2.0

3 2.0 a 11.0

4 5.0 a 11.0

5 9.0 a 11.0

6 4.0 c NaN

7 NaN d 33.0

data1 key date2

0 2.0 a 11.0

1 5.0 a 11.0

2 9.0 a 11.0

3 1.0 b 2.0

4 3.0 b 2.0

5 7.0 b 2.0

6 4.0 c NaN

7 NaN d 33.0

data1 key

0 1 b

1 3 b

2 2 a

3 4 c

4 5 a

5 9 a

6 7 b

date2 key

0 11 a

1 2 b

2 33 d

data1 key_1 date2 key_2

0 1 b 11 a

1 3 b 2 b

2 2 a 33 d

data1 key date2

0 1 b 11.0

1 3 b 2.0

2 2 a 33.0

3 4 c NaN

4 5 a NaN

5 9 a NaN

6 7 b NaN

连接:concat

pd.concat(objs, axis=0, join=’outer’, join_axes=None, ignore_index=False,keys=None, levels=None, names=None, verify_integrity=False,copy=True)

s1 = pd.Series([1,2,3])

s2 = pd.Series([2,3,4])

s3 = pd.Series([1,2,3],index=list(‘ach’))

s4 = pd.Series([2,3,4],index=[‘b’,’e’,’d’])

print(s4)

【参数axis】

concat连接s1和s2,

参数axis=0,是行+行,返回series

sc = pd.concat([s1,s2])

print(sc,type(sc))

concat连接s3和s4

sc2 = pd.concat([s3,s4])

print(sc2.sort_index()) # 对连接的series的index排序

print(‘——————–‘)

参数axis=1,是列+列,返回dataframe

df = pd.concat([s1,s2],axis=1)

print(df,type(df))

输出结果:

0 1

1 2

2 3

0 2

1 3

2 4

dtype: int64

a 1

b 2

c 2

d 4

e 3

h 3

dtype: int64

连接方式:join,join_axes

s1 = pd.Series([1,2,3],index=list(‘abc’))

s2 = pd.Series([2,3,4],index=list(‘bcd’))

print(s1)

print(s2)

print(‘—————‘)

【参数join】

参数join默认为outer,取联合;join为inner取交集。

print(pd.concat([s1,s2],axis=1,join=’inner’))

print(‘—————‘)

【参数join_axes】

参数join_axes默认为None,若定义join_axes,可以指定联合的index

print(pd.concat([s1,s2],axis=1,join_axes=[[‘a’,’b’,’c’]]))

输出结果:

a 1

b 2

c 3

dtype: int64

b 2

c 3

d 4

dtype: int64

0 1

a 1 NaN

b 2 2.0

c 3 3.0

0 1 2

0 NaN 3.0 5.0

1 -4.6 NaN -8.2

2 -5.0 7.0 4.0

0 False

1 True

2 True

3 True

4 False

5 True

6 True

7 False

8 False

9 False

10 True

11 True

12 True

dtype: bool

0 1

4 2

7 3

8 4

9 5

dtype: int64

0 False

1 True

2 False

3 False

4 False

dtype: bool

0 False

1 True

2 False

3 True

4 False

Name: key2, dtype: bool

(2)替换.replace

替换 .replace

s = pd.Series(list(‘ascaazsd’))

print(s)

print(‘———‘)

print(s.replace(‘a’, np.nan)) # 用np.nan替换字符串”a”

print(‘———‘)

可一次性替换一个值或多个值

print(s.replace([‘a’,’s’] ,np.nan))

print(‘———‘)

可传入列表或字典

print(s.replace({‘a’:’hello world!’,’s’:123}))

‘a’:’hello world!’ → a 用hello world替换

输出结果:

0 a

1 s

2 c

3 a

4 a

5 z

6 s

7 d

dtype: object

0 NaN

1 NaN

2 c

3 NaN

4 NaN

5 z

6 NaN

7 d

dtype: object

分组 – groupby()

df = pd.DataFrame({‘A’ : [‘foo’, ‘bar’, ‘foo’, ‘bar’,’foo’, ‘bar’, ‘foo’, ‘foo’],

‘B’ : [‘one’, ‘one’, ‘two’, ‘three’, ‘two’, ‘two’, ‘one’, ‘three’],

‘C’ : np.random.randn(8),

‘D’ : np.random.randn(8)})

print(df)

print(‘——‘)

print(df.groupby(‘A’),type(df.groupby(‘A’)))

print(‘——‘)

直接分组得到一个groupby对象,是一个中间数据,没有进行计算

a = df.groupby(‘A’).mean() # 以A分组,算平均值

print(a,type(a))

print(‘——‘)

b = df.groupby([‘A’,’B’]).mean() # 以A、B分组,算平均值

print(b,type(b))

print(‘——‘)

c = df.groupby(‘A’)[‘D’].mean() # 以A分组,再取个D列求D的平均值

print(c)

通过分组后的计算,得到一个新的dataframe

默认axis = 0,以行来分组

可单个或多个([])列分组

输出结果:

A B C D

0 foo one -0.644577 1.118908

1 bar one 1.179229 -0.386515

2 foo two -1.060731 0.536817

3 bar three 1.151450 -1.321295

4 foo two 0.388789 2.147647

5 bar two 0.059214 1.008346

6 foo one 1.364315 -0.617321

7 foo three -0.834223 -0.671149

C D

A

bar 0.796631 -0.233155

foo -0.157285 0.502980

A

bar -0.233155

foo 0.502980

Name: D, dtype: float64

[(‘A’, X Y

0 A 1

2 A 3), (‘B’, X Y

1 B 4

3 B 2)] → 可迭代对象,直接生成list

(‘A’, X Y

0 A 1

2 A 3) → 以元祖形式显示

A

X Y

0 A 1

2 A 3

B

X Y

1 B 4

3 B 2

{‘A’: Int64Index([0, 2], dtype=’int64′), ‘B’: Int64Index([1, 3], dtype=’int64′)}

Int64Index([0, 2], dtype=’int64′)

A B C D

0 foo one -1.145245 0.282188

1 bar one 1.098816 -1.229021

2 foo two -0.202471 1.313067

3 bar three 0.423064 -0.944102

4 foo two 1.035012 -0.159363

5 bar two 2.586997 -0.870078

6 foo one 0.549764 -0.323518

7 foo three -2.402178 0.990989

Int64Index([7], dtype=’int64′)

float64

data1 data2

0 0.269405 0.236738

1 0.000449 0.503876

object

key1 key2

0 a one

1 b two

{‘d’: ‘two’, ‘b’: ‘one’, ‘c’: ‘two’, ‘a’: ‘one’, ‘e’: ‘three’}

one two

0 1 5

1 9 13

2 17 21

3 25 29

通过函数分组

df = pd.DataFrame(np.arange(16).reshape(4,4),

columns = [‘a’,’b’,’c’,’d’],

index = [‘abc’,’bcd’,’aa’,’b’])

print(df,’\n’)

print(df.groupby(len).sum())

按照字母长度分组

a b c d

abc 0 1 2 3

bcd 4 5 6 7

aa 8 9 10 11

b 12 13 14 15

a b c d

1 12 13 14 15

2 8 9 10 11

3 4 6 8 10

多函数计算:agg()

多函数计算可以让分组数据同时计算两个以上的统计

df = pd.DataFrame({‘a’:[1,1,2,2],

‘b’:np.random.rand(4),

‘c’:np.random.rand(4),

‘d’:np.random.rand(4),})

print(df,’\n’)

print(df.groupby(‘a’).agg([‘mean’,np.sum]))

print(df.groupby(‘a’)[‘b’].agg({‘result1’:np.mean,

‘result2’:np.sum}))

函数写法可以用str,或者np.方法

可以通过list,dict传入,当用dict时,key名为columns

输出结果:

a b c d

0 1 0.689856 0.212391 0.575196

1 1 0.516206 0.871239 0.340175

2 2 0.440666 0.428301 0.573359

3 2 0.211181 0.900975 0.845924

b c d

mean sum mean sum mean sum

a

1 0.603031 1.206062 0.541815 1.083630 0.457686 0.915371

2 0.325924 0.651847 0.664638 1.329276 0.709641 1.419282

result2 result1

a

1 1.206062 0.603031

2 0.651847 0.325924

七、分组转换及一般性”拆分-应用-合并”

(1)数据分组转换transform

数据分组转换,transform

df = pd.DataFrame({‘data1’:np.random.rand(5),

‘data2’:np.random.rand(5),

‘key1’:list(‘aabba’),

‘key2’:[‘one’,’two’,’one’,’two’,’one’]})

print(df,’\n’)

k_mean = df.groupby(‘key1’).mean() # 以key1分组,求平均值

print(k_mean,’\n’)

print(pd.merge(df,k_mean,left_on=’key1′,right_index=True).add_prefix(‘mean_’)) # .add_prefix(‘mean_’):添加前缀

print(‘—————‘)

通过分组、合并,得到一个包含均值的Dataframe

print(df.groupby(‘key2′).mean(),’\n’) # 按照key2分组求均值

print(df.groupby(‘key2’).transform(np.mean))

data1、data2每个位置元素取对应分组列的均值

字符串不能进行计算

输出结果:

data1 data2 key1 key2

0 0.295972 0.857439 a one

1 0.934285 0.278705 a two

2 0.302457 0.844987 b one

3 0.248708 0.549459 b two

4 0.978329 0.691800 a one

data1 data2

key1

a 0.736195 0.609315

b 0.275582 0.697223

mean_data1_x mean_data2_x mean_key1 mean_key2 mean_data1_y mean_data2_y

0 0.295972 0.857439 a one 0.736195 0.609315

1 0.934285 0.278705 a two 0.736195 0.609315

4 0.978329 0.691800 a one 0.736195 0.609315

2 0.302457 0.844987 b one 0.275582 0.697223

3 0.248708 0.549459 b two 0.275582 0.697223

key a b c d

date

2017-05-01 1.978948 NaN 3.127164 4.127823

2017-05-02 7.059673 6.444399 NaN 0.198809

2017-05-03 1.435535 4.657516 5.816060 NaN

values

date key

2017-05-01 a 1.0

c 1.0

d 1.0

2017-05-02 a 1.0

b 1.0

d 1.0

2017-05-03 a 1.0

b 1.0

c 1.0

(2)交叉表crosstab

交叉表做因子频率计算。

pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

交叉表:crosstab,统计频率的时候用交叉表,如字符串只能计算频率

默认情况下,crosstab计算因子的频率表,比如用于str的数据透视分析

pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

df = pd.DataFrame({‘A’: [1, 2, 2, 2, 2],

‘B’: [3, 3, 4, 4, 4],

‘C’: [1, 1, np.nan, 1, 1]})

print(df)

print(‘—–‘)

print(pd.crosstab(df[‘A’],df[‘B’]))

print(‘—–‘)

如果crosstab只接收两个Series,它将提供一个频率表。

用A的唯一值,统计B唯一值的出现次数

返回的频率表意思:B=3,A=1的频率为1,以此类推。

print(pd.crosstab(df[‘A’],df[‘B’],normalize=True))

print(‘—–‘)

normalize:默认False,将所有值除以值的总和进行归一化 → 为True时候显示百分比

返回的频率表是B=3,A=1的频率为1,总和为1+0+1+3=5,1/5=0.2

print(pd.crosstab(df[‘A’],df[‘B’],values=df[‘C’],aggfunc=np.sum))

print(‘—–‘)

values:可选,根据因子聚合的值数组

aggfunc:可选,如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算

这里相当于以A和B界定分组,计算出每组中第三个系列C的值

print(pd.crosstab(df[‘A’],df[‘B’],values=df[‘C’],aggfunc=np.sum, margins=True))

margins:布尔值,默认值False,添加行/列边距(小计求和)

输出结果:

A B C

0 1 3 1.0

1 2 3 1.0

2 2 4 NaN

3 2 4 1.0

4 2 4 1.0

B 3 4

A

1 1.0 NaN

2 1.0 2.0

Original: https://blog.csdn.net/weixin_36084095/article/details/114911967
Author: 里灰啊
Title: python panda3d从入门_笔记:Python之Pandas的使用技巧

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/738999/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球