如何编写函数生成含指定列与Number列比值的新DataFrame?
实现方法
首先,先构造你提供的示例DataFrame:
import pandas as pd data = { 'N': [1, 2, 3], 'Place': ['Angus', 'Argyl', 'Ayrsh'], 'Number': [25, 43, 14], 'C': [33, 23, 46], 'H': [45, 12, 27], 'E': [23, 56, 92], 'G': [60, 19, 14], 'D': [43, 45, 12] } df = pd.DataFrame(data)
推荐方法:向量化运算(无需遍历,高效快捷)
Pandas的核心优势就是向量化操作,完全不需要手动遍历行/列,直接用div方法按行做除法即可:
# 指定需要处理的列 target_cols = ['C', 'H', 'E', 'G', 'D'] # 对目标列每行的值除以同一行的Number列,同时给新列加上mean前缀 normalized_df = df[target_cols].div(df['Number'], axis=0).add_prefix('mean') # 如果需要保留原有的N和Place列,合并即可 final_df = pd.concat([df[['N', 'Place']], normalized_df], axis=1)
运行后final_df的结果如下(小数保留简化展示):
| N | Place | meanC | meanH | meanE | meanG | meanD |
|---|---|---|---|---|---|---|
| 1 | Angus | 1.32 | 1.8 | 0.92 | 2.4 | 1.72 |
| 2 | Argyl | 0.53 | 0.28 | 1.30 | 0.44 | 1.05 |
| 3 | Ayrsh | 3.29 | 1.93 | 6.57 | 1.0 | 0.86 |
手动遍历实现(不推荐,仅作学习参考)
如果出于学习目的想实现遍历逻辑,可以用iterrows,但注意大数据量下性能远低于向量化操作:
# 初始化空的结果字典 result = {'N': [], 'Place': []} for col in target_cols: result[f'mean{col}'] = [] # 遍历每一行计算 for idx, row in df.iterrows(): result['N'].append(row['N']) result['Place'].append(row['Place']) number_val = row['Number'] for col in target_cols: result[f'mean{col}'].append(row[col] / number_val) # 转成最终DataFrame final_df = pd.DataFrame(result)
内容的提问来源于stack exchange,提问作者Daisy
相关产品推荐
相关产品推荐

