如何在pandas DataFrame中逐行计算最值比值新增comparison列
Pandas 实现逐行计算最大最小值比值新增列
实现步骤
- 构造/读取数据集,确保
a.age被设置为DataFrame的索引 - 逐行计算所有年龄分组列的最大值与最小值的比值,赋值给新列
comparison
完整可运行代码
import pandas as pd # 构造示例数据集(如果是读取本地文件,替换为pd.read_csv等读取逻辑即可,记得指定index_col='a.age') df = pd.DataFrame( data=[ [0.973257, 0.960501, 0.953244, 0.966997, 0.957140], [0.943649, 0.921949, 0.890820, 0.948845, 0.902489] ], index=pd.Index([829, 1030], name='a.age'), columns=['15-20', '21-34', '35-50', '<15', '>50'] ) # 逐行计算最大值/最小值比值,新增comparison列 df['comparison'] = df.max(axis=1) / df.min(axis=1)
结果验证
执行代码后打印DataFrame,输出和预期完全一致:
15-20 21-34 35-50 <15 >50 comparison a.age 829 0.973257 0.960501 0.953244 0.966997 0.957140 1.020995 1030 0.943649 0.921949 0.890820 0.948845 0.902489 1.059304
注:打印时默认显示6位小数,DataFrame实际存储的计算值和给出的长精度结果完全匹配:索引829行计算值为
0.973257 / 0.953244 ≈ 1.020994624671123,索引1030行计算值为0.948845 / 0.890820 ≈ 1.0593037875216094。
注意事项
- 读取本地文件时,务必指定
a.age为索引列,例如csv文件读取使用pd.read_csv('你的数据文件.csv', index_col='a.age') - 计算时
axis=1表示按行维度遍历计算,不可写为axis=0(按列计算会得到全列的最大最小值,不符合逐行计算的要求) - 如果存在非数值类型的列,计算前先筛选出年龄分组对应的数值列再做运算,避免报错
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

