如何在宽格式DataFrame中提取Volume.1与最大Volume值列
解决方案
构造示例数据
先还原你的原始DataFrame,方便测试:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Subject': [1, 2, 3, 4], 'Volume.1': [77, 65, 98, 66], 'Volume.2': [22, 182, np.nan, 76], 'Volume.3': [1, np.nan, np.nan, 145], 'Volume.4': [np.nan, np.nan, np.nan, 677] })
符合你期望结果的代码
从你的输出结果来看,实际需求是提取Volume.2至Volume.4的最大值(忽略NA),代码如下:
# 新增列:计算Volume.2到Volume.4的每行最大值 df['最大Volume值'] = df[['Volume.2', 'Volume.3', 'Volume.4']].max(axis=1, skipna=True) # 保留需要的列 result_df = df[['Subject', 'Volume.1', '最大Volume值']]
执行后得到的结果和你期望的一致:
| Subject | Volume.1 | 最大Volume值 |
|---|---|---|
| 1 | 77 | 22.0 |
| 2 | 65 | 182.0 |
| 3 | 98 | NaN |
| 4 | 66 | 677.0 |
如果需求是包含Volume.1的最大值
若你确实需要计算Volume.1至Volume.4的最大值,只需调整列选择范围:
df['最大Volume值'] = df.filter(regex='Volume\.\d').max(axis=1, skipna=True) result_df = df[['Subject', 'Volume.1', '最大Volume值']]
此时行1的最大值会是77.0,行3的最大值会是98.0,更符合字面描述的需求。
代码说明
max(axis=1):指定按行计算最大值,默认是按列;skipna=True:自动忽略NA值,若某行所有列都是NA,结果返回NA;filter(regex='Volume\.\d'):用正则表达式匹配所有以Volume.开头的列,适合列数较多的场景。
内容的提问来源于stack exchange,提问作者DW1310
相关产品推荐
相关产品推荐

