Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在pandas中定义用户定义的函数_Python_Pandas - Fatal编程技术网

Python 如何在pandas中定义用户定义的函数

Python 如何在pandas中定义用户定义的函数,python,pandas,Python,Pandas,我有一个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

我有一个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&&您可以定义两个掩码并将其传递给
np。其中

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

一个有用的函数是
apply

data_df['position'] = data_df['salary'].apply(lambda salary: 'Normal Employee' if salary <= 8000 else 'Experienced Employee', axis=1)

data_-df['position']=data_-df['salary']。应用(lambda-salary:'Normal Employee',如果salary我将使用一个简单的函数,如:

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

apply
对于大df来说会很慢
apply
对于大df来说会很慢当我们使用groupby时如何获得正常员工的计数你能解释一下你的意思吗?你是在使用
df.groupby('position').count()吗?
data_df['position'] = data_df['salary'].apply(lambda salary: 'Normal Employee' if salary <= 8000 else 'Experienced Employee', axis=1)
def f(x):
    if x <= 8000:
        x = 'Normal Employee'
    elif 8000 < x <= 25000:
        x = 'Experienced Employee'
    return x
df['position'] = df['salary'].apply(f)