Pandas常用计数函数实战教程
#本文介绍Pandas中对数据框行或列进行计数、查找唯一值的相关函数,并通过示例进行说明。
重复记录计数
包括对数据框的某列、行以及每列查找重复记录数。
import pandas as pd
df = pd.DataFrame({team: [A, A, A, A, B, B, B, B],
position: [G, G, G, F, G, G, F, F],
points: [5, 5, 8, 10, 5, 7, 10, 10]})
df
# team position points
# 0 A G 5
# 1 A G 5
# 2 A G 8
# 3 A F 10
# 4 B G 5
# 5 B G 7
# 6 B F 10
# 7 B F 10
# 计算points列重复的值
print(len(df[points]) - len(df[points].drop_duplicates()))
# 输出4
# 计算重复记录
print(len(df)-len(df.drop_duplicates()))
# 输出2
# 显示重复记录
df[df.duplicated()]
# team position points
# 1 A G 5
# 7 B F 10
# 计算每个行的重复数
df.groupby(df.columns.tolist(), as_index=False).size()
# team position points
# A F 10 1
# G 5 2
# 8 1
# B F 10 2
# G 5 1
# 7 1
分组获取数据框的前N行
有时我们需要获取每组中前几行信息,如体育赛事中前三名进入下一轮比赛。
import pandas as pd
# 示例数据
df = pd.DataFrame({team: [A, A, A, B, B, C],
conference: [East, East, East, West, West, East],
points: [11, 8, 10, 6, 6, 5]})
# 按team分组,并取每组前两行记录
df.groupby(team).head(2).reset_index(drop=True)
# team conference points
# 0 A East 11
# 1 A East 8
# 2 B West 6
# 3 B West 6
# 4 C East 5
# 按多列分组,并取前两行
df.groupby([team, conference]).head(2).reset_index(drop=True)
# team conference points
# 0 A East 11
# 1 A East 8
# 2 B West 6
# 3 B West 6
# 4 C East 5
计算唯一值示例
本节介绍如何对数据框中列计算其唯一值的数量。
import pandas as pd
#create DataFrame
df = pd.DataFrame({team: [A, A, A, B, B, C],
conference: [East, East, East, West, West, East],
points: [11, 8, 10, 6, 6, 5]})
# 某列的唯一值
df.team.unique()
# array([A, B, C], dtype=object)
# 每列的唯一值
for col in df:
print(df[col].unique())
# [A B C]
# [East West]
# [11 8 10 6 5]
# 获取唯一值并排序
points = df.points.unique()
# 排序结果
points.sort()
# 显示结果
points
# array([ 5, 6, 8, 10, 11])
# 计算某列中值的数量
df.team.value_counts()
# A 3
# B 2
# C 1
# Name: team, dtype: int64
查找多列的唯一值
查找多列唯一值主要使用unique()和ravel()函数:
-
unique(): 按照外观顺序返回唯一值 ravel(): 返回扁平的数据序列
import pandas as pd
# 示例数据
df = pd.DataFrame({col1: [a, b, c, d, e],
col2: [a, c, e, f, g],
col3: [11, 8, 10, 6, 6]})
# 返回多列组合的唯一值
pd.unique(df[[col1, col2]].values.ravel())
# array([a, b, c, e, d, f, g], dtype=object)
# 表示两列组合一起共有7个基元素(唯一值)
# 返回组合列唯一值的数量
uniques = pd.unique(df[[col1, col2]].values.ravel())
len(uniques)
# 7
# 唯一值按数据框形式返回
uniques = pd.unique(df[[col1, col2]].values.ravel())
pd.DataFrame(uniques)
# 0
# 0 a
# 1 b
# 2 c
# 3 e
# 4 d
# 5 f
# 6 g
列中值出现次数
import pandas as pd
# 示例数据
df = pd.DataFrame({team: [A, A, B, B, B, B, C, C],
points: [25, 12, 15, 14, 19, 23, 25, 29],
assists: [5, 7, 7, 9, 12, 9, 9, 4],
rebounds: [11, 8, 10, 6, 6, 5, 9, 12]})
# 计数team列中B出现次数
df[team].value_counts()[B]
# 4
# team列中每个值的出现次数
df[team].value_counts()
# B 4
# A 2
# C 2
# assists列中数值出现次数
df[assists].value_counts()[9]
# 3
# 每个值出现次数
df[assists].value_counts()
# 9 3
# 7 2
# 5 1
# 12 1
# 4 1
# Name: assists, dtype: int64
