pandas 应用自定义函数定义新的框架列

x8diyxa7  于 2023-10-14  发布在  其他
关注(0)|答案(2)|浏览(122)

我有一个六列的DataFrame,它定义了一个给定的个体:

  1. Age
  2. Gender
  3. Education Level
  4. Job Title
  5. Years of Experience
  6. Salary
    此外,我有四个技能集列,每个技能等级为10:
  7. Programming skills
  8. Microsoft Office
  9. Web development
  10. Sales management
    我想添加一个新列,表示每个人的平均技能水平。我正在寻找一种方法:
  • 根据技能集列中的值计算平均技能级别
  • 然后将该计算的平均值作为新列添加。

下面是我的DataFrame的一个示例和我到目前为止尝试过的代码:

import pandas as pd

data = {
    'Age': [30, 25, 35],
    'Gender': ['Male', 'Female', 'Male'],
    'Education Level': ['Bachelor', 'Master', 'Ph.D.'],
    'Job Title': ['Engineer', 'Manager', 'Analyst'],
    'Years of Experience': [5, 8, 3],
    'Salary': [60000, 80000, 55000],
    'Programming skills': [8, 7, 6],
    'Microsoft Office': [9, 8, 7],
    'Web development': [6, 5, 7],
    'Sales management': [7, 8, 6]
}

df = pd.DataFrame(data)

# Calculate and add the average skill level column here
rekjcdws

rekjcdws1#

这取决于你要找的是什么,但总的来说,它看起来像这样

df['new_column'] = values

其中values是一个列表或数组,并且必须与您的数组长度相同

zyfwsgd6

zyfwsgd62#

将新列定义为以前列的平均值在其他地方已经得到了回答。在你的情况下,它看起来像这样:

# Select columns to average
skillset_columns = ['Programming skills','Microsoft Office','Web development','Sales management']

# Define the new column
df['mean skill'] = df[skillset_columns].mean(axis=1)

输出量:

Age  Gender Education Level Job Title  Years of Experience  Salary  Programming skills  Microsoft Office  Web development  Sales management  mean skill
0   30    Male        Bachelor  Engineer                    5   60000                   8                 9                6                 7         7.5
1   25  Female          Master   Manager                    8   80000                   7                 8                5                 8         7.0
2   35    Male           Ph.D.   Analyst                    3   55000                   6                 7                7                 6         6.5

如果这是你的问题,它将是how to find mean in rows of dataframe?的副本和documentation的字面应用。
然而,以下替代方案可能更适合您的需求,基于您不太清楚的评论“* 我已经制定了这样的条件,当工资> 60000和'职位' == '数据分析师','技能'列标记出10,即7,8或9任何东西'。

# 1. Define your custom row function for skill estimation
def skill_estimator(row):
    '''Your feature engineering formula to calculate mean skill for one individual'''
    
    # A first condition
    if (row['Salary'] >= 50000) and (row['Job Title'] == 'Analyst'):
        # why not some weighted average
        s = (row['Programming skills'] * 2 + row['Web development'])/3
    else:
        s=0
        
    # and so on and so forth
    
    return s

# 2. Apply it to every row, defining a new column:
df['mean skill'] = df.apply(skill_estimator, axis='columns')

在这种情况下,你的问题是一个重复的,例如。How to apply a function to two columns of Pandas dataframe,除非您将函数应用于2个以上的列。
但更进一步,您的特征可以是具有依赖于配置文件的权重的加权平均值,例如。给予更多的重要性,以销售的情况下,配置文件“经理”等等。

相关问题