如何在熊猫中定义用户定义的函数

新手上路,请多包涵

我有一个 csv 文件,其中包含如下信息

name    salary  department
a        2500      x
b        5000      y
c        10000      y
d        20000      x

我需要使用 Pandas 将其转换为类似的形式

dept    name    position
x        a       Normal Employee
x        b       Normal Employee
y        c       Experienced Employee
y        d       Experienced Employee

如果工资 <=8000 职位是普通员工

如果工资 >8000 && <=25000 职位是 Experienced Employee

我的分组依据默认代码

import csv
import pandas
pandas.set_option('display.max_rows', 999)
data_df = pandas.read_csv('employeedetails.csv')
#print(data_df.columns)
t = data_df.groupby(['dept'])
print t

我需要在此代码中进行哪些更改才能获得上面提到的输出

原文由 Edwin Baby 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 324
2 个回答

您可以定义 2 个掩码并将它们传递给 np.where

 In [91]:
normal = df['salary'] <= 8000
experienced = (df['salary'] > 8000) & (df['salary'] <= 25000)
df['position'] = np.where(normal, 'normal emplyee', np.where(experienced, 'experienced employee', 'unknown'))
df

Out[91]:
  name  salary department              position
0    a    2500          x        normal emplyee
1    b    5000          y        normal emplyee
2    c   10000          y  experienced employee
3    d   20000          x  experienced employee

或者稍微更具可读性的是将它们传递给 loc

 In [92]:
df.loc[normal, 'position'] = 'normal employee'
df.loc[experienced,'position'] = 'experienced employee'
df

Out[92]:
  name  salary department              position
0    a    2500          x       normal employee
1    b    5000          y       normal employee
2    c   10000          y  experienced employee
3    d   20000          x  experienced employee

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

我会使用一个简单的函数,例如:

 def f(x):
    if x <= 8000:
        x = 'Normal Employee'
    elif 8000 < x <= 25000:
        x = 'Experienced Employee'
    return x

然后将其应用于 df

 df['position'] = df['salary'].apply(f)

原文由 Fabio Lamanna 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题