Pandas | 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’ 指定了相关性系数的格式化方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胜天半月子

打不打商的无所谓,能帮到你就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值