nlargest
在Pandas中,nlargest
是一个非常有用的函数,它用于返回一个Series或DataFrame中最大的 n
个值。这个函数可以根据一个或多个列的值来选择最大的 n
行。
以下是 nlargest
函数的一些基本用法:
对Series使用 nlargest
import pandas as pd
# 创建一个示例 Series
s = pd.Series([1, 3, 2, 4, 5, 3])
# 返回值最大的3个元素
largest_three = s.nlargest(3)
print(largest_three)
对DataFrame使用 nlargest
# 创建一个示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [5, 6, 7, 8, 9]
})
# 返回值最大的3行,基于所有列的值
largest_three_rows = df.nlargest(3, 'A')
print(largest_three_rows)
在这个例子中,nlargest
根据列 'A'
的值来选择最大的3行。
根据多个列选择 nlargest
# 返回值最大的3行,首先根据列 'A' 的值,如果 'A' 相同,则根据列 'B'
largest_three_rows_multi = df.nlargest(3, ['A', 'B'])
print(largest_three_rows_multi)
使用 keep
参数
keep
参数用于控制当存在相同的值时如何处理:
'all'
:默认值,保留所有具有相同值的行。'first'
:如果存在相同的值,只保留第一个出现的行。'last'
:如果存在相同的值,只保留最后一个出现的行。
# 返回值最大的3行,如果存在相同的值,只保留第一个出现的行
largest_three_rows_keep = df.nlargest(3, 'A', keep='first')
print(largest_three_rows_keep)
nlargest
是一个非常灵活的函数,可以帮助你快速找到数据中最大的值或行,特别是在处理大型数据集时非常有用。
nlargest结合heatmap选择强相关属性 ⭐
本点 选择如下案例进行展示,拓展到多特征数据集时,此方法尤为突出
# 创建一个示例 DataFrame
# 创建一个示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [6, 6, 7, 8, 9],
'C': [8, 8, 5, 7, 0],
'D': [7, 5, 2, 4, 3],
'E': [8, 2, 6, 9, 13],
})
df
})
df
# nlargest 选择和属性'A'相关性最强的3个属性
cols = df.corr().nlargest(3, 'A')['A'].index
print(cols)
# 计算这些列之间的相关性系数矩阵
cm = np.corrcoef(df[cols].T.values)
cm
Index(['A', 'B', 'E'], dtype='object')
array([[1. , 0.9701425 , 0.66577138],
[0.9701425 , 1. , 0.82636325],
[0.66577138, 0.82636325, 1. ]])
# 绘制热图
plt.figure(figsize=(4, 4))
sns.heatmap(cm, annot=True, linewidths=0.5, fmt='.2f', xticklabels=cols, yticklabels=cols) # xticklabels=cols, yticklabels=cols 标签手动加上
# 显示图形
plt.show()
sns.heatmap(cm, annot=True, linewidths=0.5, fmt='.2f')
解释代码
# 创建一个示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [6, 6, 7, 8, 9],
'C': [8, 8, 5, 7, 0],
'D': [7, 5, 2, 4, 3],
'E': [8, 2, 6, 9, 13],
})
df
# 返回值最大的3行,基于所有列的值
largest_three_rows = df.nlargest(3, 'A')
largest_three_rows
largest_three_rows['A'].index
Index([4, 3, 2], dtype=‘int64’)
cols = df.corr()
cols
两句代码效果等价
df.corr().nlargest(2, 'A').index == df.corr().nlargest(2, 'A')['A'].index
array([ True, True])
df[cols]
df[cols].T
df[cols].T.values
corrcoef 计算这些列之间的相关性系数矩阵
函数接受一个二维数组作为输入,并返回一个相关性系数矩阵。这个矩阵是一个方阵,其中每个元素 (i, j) 表示第 i 列和第 j 列之间的相关性系数。
cm = np.corrcoef(df[cols].T.values)
array([[1. , 0.9701425 , 0.66577138],
[0.9701425 , 1. , 0.82636325],
[0.66577138, 0.82636325, 1. ]])
corrcoef为什么需要转置T?
这与corrcoef函数的作用是息息相关的 ,corrcoef 看下面的实例
cm = np.corrcoef(df[cols].values)
cm
df[cols]
df[cols].values
cm = np.corrcoef(df[cols].T.values)
cm
df[cols].T
df[cols].T.values
- nlargest结合heatmap使用的完整代码
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# 假设 train 是一个 DataFrame
# k 是您想要显示的相关性最大的列的数量
k = 5
f, ax = plt.subplots(figsize=(12, 12))
# 获取相关性最大的 k 个列的名称
cols = train.corr().nlargest(k, 'winPlacePerc')['winPlacePerc'].index
# 计算这些列之间的相关性系数矩阵
cm = np.corrcoef(train[cols].values.T)
# 绘制热图
sns.heatmap(cm, annot=True, linewidths=0.5, fmt='.2f', ax=ax,
yticklabels=cols.values, xticklabels=cols.values)
# 显示图形
plt.show()
这段代码首先计算了 train DataFrame 中 winPlacePerc 列与其他列之间的相关性,并选择了相关性最大的 k 个列。然后,它计算了这些列之间的相关性系数矩阵,并使用 sns.heatmap 函数绘制了热图。annot=True 参数表示在热图的每个单元格中显示相关性系数,linewidths=0.5 设置了单元格之间的线宽,fmt=‘.2f’ 指定了相关性系数的格式化方式。