#本文介绍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