apply()
函数可以用在DataFrame和Series 数据结构中,
- 当用在Dataframe 结构中时,传入自定义函数的第一个参数是DataFram每一列
- 当用在Series 结构中时,传入自定义函数的第一个参数是Series中的每一个数据
- 当用在分组后的DataFrame中时,传入自定义函数的第一个参数是指定列的每一个分组
import pandas as pd
import numpy as np
data = pd.read_csv('joyful-pandas/data/Company_data.csv')
data.head()
证券代码 | 日期 | 收入类型 | 收入额 | |
---|---|---|---|---|
0 | 1 | 2008/12/31 | 1 | 1.084218e+10 |
1 | 1 | 2008/12/31 | 2 | 1.259789e+10 |
2 | 1 | 2008/12/31 | 3 | 1.451312e+10 |
3 | 1 | 2008/12/31 | 4 | 1.063843e+09 |
4 | 1 | 2008/12/31 | 5 | 8.513880e+08 |
# Datafram 应用data_frame,传入的数据是每一列数据,自定义函数被执行了三次
def fn_1(series):
print(type(series))
print(max(series))
return max(series)
data.apply(fn_1)
<class 'pandas.core.series.Series'>
900957
<class 'pandas.core.series.Series'>
2016/12/31
<class 'pandas.core.series.Series'>
176
<class 'pandas.core.series.Series'>
2880310000000.0
证券代码 900957
日期 2016/12/31
收入类型 176
收入额 2880310000000.0
dtype: object
# series 使用apply()函数,传入自定义函数的第一个参数是每一个数字
def fn_2(x,y):
return y + str(x)
data['收入类型'].apply(fn_2,args=("收入类型",))
0 收入类型1
1 收入类型2
2 收入类型3
3 收入类型4
4 收入类型5
...
964017 收入类型12
964018 收入类型13
964019 收入类型14
964020 收入类型15
964021 收入类型16
Name: 收入类型, Length: 964022, dtype: object
# 应用在分组时,可以看出得到的结果是按照证券代码分组后,每组收入额的平均值。
data.groupby("证券代码")["收入额"].apply(lambda x:x.mean())
证券代码
1 1.706765e+10
2 3.651859e+10
4 3.332924e+07
5 5.009527e+07
6 1.506870e+09
...
900950 1.420116e+09
900951 4.788945e+08
900953 1.766909e+09
900956 1.805563e+09
900957 5.946438e+07
Name: 收入额, Length: 3172, dtype: float64