数据分析案例:在一个excel表格中,行为样本,列为特征. 其中有两个特征(分别称之为x
和y
)可能出现若干次,我们希望:
- 统计
x
出现次数,新开一列特征x_count
记录该特征出现次数. 例如有5个样本的x
都相同,则这5个样本的x_count
列的值都赋为5. - 合并具有相同
x
和y
的样本,对于其它的特征,只保留其中一个样本的即可(例如同x
和y
的样本中,保留顺序第一次出现的样本的其它特征).
关键方法:apply
, groupby
.
读取表格
import pandas as pd
df = pd.read_excel('excel_name.xlsx')
统计特征x的出现次数
- 很经典的方式,利用字典这一数据结构,遍历特征
x
,已存在于字典则+1
,不存在于字典则初始化为1
. - 有了特征名到出现次数的映射,就可以调用Pandas的
apply
方法映射出新的特征列,存储出现次数的信息.
x_count = {}
for x in df['x']:
if x in x_count:
x_count[x] += 1
else:
x_count[x] = 1
将特征x的出现次数赋值给对应的样本
apply
方法获取一个函数,逐个apply到指定特征列的每个值. 也就是遍历该特征列的每个值作为函数输入,所以得到的是一列数据.- 函数可以用
lambda
函数,更简洁.
df['x_count'] = df['x'].apply(lambda x: x_count[x])
合并相同特征x(特征y)的样本
groupby
方法,根据指定特征进行分组,这样就可以很方便将同x
和y
的样本聚合到一起.first
方法保留group之后每组的第一个样本.
df = df.groupby(['x', 'y']).first().reset_index()
保存表格
df.to_excel("excel_name.xlsx", index=False)