python-pandas
pd.cut()
1
pd.cut( x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', )
x : 一维数组(对应前边例子中提到的销售业绩)
bins :整数,标量序列或者间隔索引,是进行分组的依据,
- 如果填入整数n,则表示将x中的数值分成等宽的n份(即每一组内的最大值与最小值之差约相等);
- 如果是标量序列,序列中的数值表示用来分档的分界值
- 如果是间隔索引,“ bins”的间隔索引必须不重叠
right :布尔值,默认为True表示包含最右侧的数值
- 当“ right = True”(默认值)时,则“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]
- 当
bins
是一个间隔索引时,该参数被忽略。
labels : 数组或布尔值,可选.指定分箱的标签
- 如果是数组,长度要与分箱个数一致,比如“ bins”=[1、2、3、4]表示(1,2],(2,3],(3,4]一共3个区间,则labels的长度也就是标签的个数也要是3
- 如果为False,则仅返回分箱的整数指示符,即x中的数据在第几个箱子里
- 当bins是间隔索引时,将忽略此参数
retbins: 是否显示分箱的分界值。默认为False,当bins取整数时可以设置retbins=True以显示分界值,得到划分后的区间
precision:整数,默认3,存储和显示分箱标签的精度。
include_lowest:布尔值,表示区间的左边是开还是闭,默认为false,也就是不包含区间左边。
duplicates:如果分箱临界值不唯一,则引发ValueError或丢弃非唯一
ok,所有参数的含义与作用就是这些了,纯文字解释怎么都不如代码跑一遍来的直观,我们在代码中实现一下再结合上述文字解释就很容易理解了。而且并不是所有参数都是常用的,有些参数很少用到!
pd.insert()
把value插入dataframe的指定位置loc中,若插入的数据value已在DataFrame中,则返回 错误ValueError,如想完成重复值的插入需要把allow_duplicates设置为True
loc
:参数column插入的位置,如果想插入到第一例则为0,取值范围: 0 <= loc <= len(columns),其中len(columns)为Dataframe的列数注意:这个参数没有-1column
:给 插入数据value取列名,可为数字,字符串等value
:可以是整数,Series或者数组等allow_duplicates
: 默认 Falsepd.max():求最大值
pd.min():求最小值
pd.mean():求平均值
pd.sum() :求和
pd.std(): 标准差
pd.groupby()
我们现在根据员工进行groupby分组,得到的一个DataFrameGroupBy对象
根据某一个或一组属性分组,得到一个dataframegroupby对象
1
2groupbying = df.groupby(by="employees")
# by可以省略1
分组之后,可以进行后续的各种聚合操作
1
2
3
4groupbying.max()
groupbying.min()
groupbying.mean()
groupbying.median()pd.groupby()还支持组迭代
1
2
3for name,group in groupbying: # 遍历.DataFrameGroupBy对象
print(name)
print(group)对DataFrameGroupBy对象使用get_group()方法,能够让我们得到分组元素中的指定组的数据
分组之后对同一个列名使用不同的函数,函数使用列表形式:下面 表示的是对score分别求和、最大值、最小值、均值、个数(size)
1
df9 = df.groupby("employees")["score"].agg(["sum","max","min","mean","size"]).reset_index()
pd.agg()
聚合操作:可以指定一个列或者多个列分别使用不同的聚合函数来聚合。
对单个列进行聚合操作:
1
2
3# df.groupby("employees")["salary"].sum
# 如果只是单个元素,上下两种写法等价
df.groupby("employees").agg({"salary":"sum"})一般情况下,结果是一个以分组字段为行索引的数据帧,那如果我们也想把这个行索引变成数据帧中的一个列名属性,使用reset_index完成:
1
df9 = df.groupby("employees")["score"].agg(["sum","max","min","mean","size"]).reset_index()
对多个列使用不同的聚合函数,比如:我们想对salry求和、对score求均值,使用字段对的方式来实现
1
2
3
4salary_score = df.groupby("employees").agg({"salary":"sum",
"score":"mean"
})
salary_score详细地解释下上面的一行代码的各个函数功能:
- groupby:指定分组的列名字段
- agg:指定列名和想实施的聚合函数
- reset_index:对生成的数据帧进行索引重置
- rename:对生成的列名进行修改;上面是手动指定,需要全部列出来;rename可以对我们想要修改的列名进行重命名
pd.pivot_table()
数据透视表:
- 数据分类汇总
- 变量聚合运算
- “长表”转化为“宽表
1
2pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean',
fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)- data:数据集
- values:要聚合的列,默认情况下对所有数值型变量聚合
- index:要在数据透视表上分组的变量,可设置多个列,实现多层分组
- columns:要在数据透视表上分组的变量,注意其每个取值作为1列,实现“长表”转化为“宽表”
- aggfunc: 对values进行计算,默认为np.mean
- fill_value:要用来替换缺失值的值(在聚合后生成的数据透视表中)。
- sort: 布尔型,默认True. 是否将结果排序
index相当于数据透视表的“行”或理解为数据透视表的key,可以有多个key;values相当于数据透视表的“列”;columns相当于把列再进一步细分,也是实现“长表”转“宽表”的关键;aggfunc是对聚合在i行j列的n个数据进行运算。多层嵌套:多个index组合可实现“行”的多层分类;values+columns组合可实现“列”的多层分类。
pd.crosstab()
交叉表是一种用于计算分组频率的特殊透视图,对数据进行汇总。与许多计算分组汇总统计信息的函数一样,crosstab()可以处理分类数据。它可用于将两个或多个变量分组,并为每组的给定值执行计算。
函数接受两个或多个列表、pandas series 或dataframe,默认情况下返回每个组合的频率。我总是喜欢从一个例子开始,这样你可以更好地理解定义,然后我将继续解释语法。
crosstab()总是返回一个数据帧,实例:
1
pd.crosstab(index=diamonds['cut'], columns=diamonds['color'])
查看每个组合的平均价格。crosstab()提供values参数来引入第三个要聚合的数值变量:
pd.crosstab(index=diamonds[‘cut’],
columns=diamonds[‘color’],
values=diamonds[‘price’],
aggfunc=np.mean).round(0)pd.apply()
apply() 使用时,通常放入一个 lambda 函数表达式、或一个函数作为操作运算
1
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds
func 代表的是传入的函数或 lambda 表达式;
axis 参数可提供的有两个,该参数默认为0/列
0 或者 index ,表示函数处理的是每一列;
1 或 columns ,表示处理的是每一行;
raw ;bool 类型,默认为 False;
False ,表示把每一行或列作为 Series 传入函数中;
True,表示接受的是 ndarray 数据类型;
apply() 最后的是经过函数处理,数据以 Series 或 DataFrame 格式返回。