python利用pandas找出矩阵的最大值或最小值及其对应的位置

本文介绍如何利用Python的Pandas库在一个数值矩阵中找到最大值和最小值及其位置,通过实例演示了stack()、max()和idxmax()等方法的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pandas as pd
text = pd.DataFrame([[21,45,78],[23,56,89],[14,25,36],[47,58,69]])   # 先建立一个矩阵
print(text)
Out[1]: 
    0   1   2
0  21  45  78
1  23  56  89
2  14  25  36
3  47  58  69

# 找到最大值和最大值所对应的位置
text.stack().max()
Out[2]: 89
text.stack().idxmax()
Out[3]: (1, 2)
# 或者是p,q = text.stack().idxmax()    # 将值赋给p,q

# 找最小值和最小值所对应的位置
text.stack().min()
Out[4]: 14
text.stack().idxmin()
Out[5]: (2, 0)

 

### Python Pandas 矩阵操作与数据处理练习 以下是关于 Python 中 `pandas` 的矩阵操作以及数据处理的一些典型练习题,这些题目可以帮助加深对 `pandas` 库的理解和应用能力。 #### 题目 1:创建 DataFrame 并执行基础矩阵运算 使用 NumPy 创建两个随机矩阵 `A (3x4)` 和 `B (4x2)`,并将其转换为 pandas 的 DataFrame。随后计算它们的矩阵乘积,并验证结果是否一致。 ```python import numpy as np import pandas as pd # 创建随机矩阵 A 和 B np.random.seed(0) # 设置种子以便结果可重复 A = np.random.randint(1, 10, size=(3, 4)) B = np.random.randint(1, 10, size=(4, 2)) # 转换为 DataFrame df_A = pd.DataFrame(A, columns=['col1', 'col2', 'col3', 'col4']) df_B = pd.DataFrame(B, columns=['row1', 'row2']) # 计算矩阵乘积 result_np = A @ B # 使用 NumPy 进行矩阵乘法 result_pd = df_A.dot(df_B.T) # 使用 pandas 的 dot 方法进行矩阵乘法 print(result_np) print(result_pd.to_numpy()) ``` #### 题目 2:缺失值填充后的矩阵加法 给定两个大小相同的矩阵 `C (5x5)` 和 `D (5x5)`,其中部分位置存在 NaN 值。通过 `fillna()` 函数填补缺失值后再完成两者的逐元素相加。 ```python import numpy as np import pandas as pd # 创建带有 NaN 的矩阵 C 和 D np.random.seed(1) C = np.random.randn(5, 5) D = np.random.randn(5, 5) mask_C = np.random.choice([True, False], size=C.shape, p=[0.3, 0.7]) mask_D = np.random.choice([True, False], size=D.shape, p=[0.2, 0.8]) C[mask_C] = np.nan D[mask_D] = np.nan df_C = pd.DataFrame(C) df_D = pd.DataFrame(D) # 缺失值填充后求和 filled_df_C = df_C.fillna(0) filled_df_D = df_D.fillna(0) sum_result = filled_df_C.add(filled_df_D) print(sum_result) ``` #### 题目 3:按条件筛选矩阵中的特定子集 假设有一个 `DataFrame E (m x n)` 表示学生成绩表,每列代表一门课程的成绩。找出所有成绩大于等于 90 的学生及其对应科目名称。 ```python import pandas as pd # 构造模拟数据 data = { 'Math': [85, 92, 78, 90], 'English': [88, 95, 80, 89], 'Science': [90, 87, 95, 92] } students = ['Alice', 'Bob', 'Charlie', 'David'] df_E = pd.DataFrame(data, index=students) # 找出成绩 >= 90 的记录 high_scores = df_E[df_E >= 90].stack().reset_index() high_scores.columns = ['Student', 'Subject', 'Score'] print(high_scores.dropna()) # 删除无意义的 NaN 结果 ``` #### 题目 4:矩阵转置与聚合统计 对于一个较大的二维数组 F `(n x m)`,先将其转化为 DataFrame 后取其转置 G `(m x n)`。接着分别计算每一行的最大值最小值及平均值。 ```python import numpy as np import pandas as pd F = np.random.rand(6, 8) df_F = pd.DataFrame(F) G = df_F.T # 取转置 max_values = G.max(axis=1) # 每一行最大值 min_values = G.min(axis=1) # 每一行最小值 mean_values = G.mean(axis=1) # 每一行均值 summary_stats = pd.concat([max_values, min_values, mean_values], axis=1) summary_stats.columns = ['Max', 'Min', 'Mean'] print(summary_stats) ``` --- #### 总结 上述练习涵盖了 `pandas` 在矩阵操作方面的核心技能,包括但不限于矩阵乘法[^1]、缺失值处理[^2]、条件过滤 和统计数据汇总。通过实践这些问题,能够有效提升对 `pandas` 工具包的应用水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值